protected PropertySheet GetShaderGUIOverridePropertySheet() { m_PropertySheet = new PropertySheet(); Toggle enabledToggle = new Toggle(); m_PropertySheet.Add(new PropertyRow(new Label("Override ShaderGUI")), (row) => { enabledToggle = new Toggle(); row.Add(enabledToggle, (toggle) => { toggle.value = m_CanChangeShaderGUI.OverrideEnabled; toggle.OnToggleChanged(ChangeOverrideEnabled); }); }); m_OverrideFieldRow = new PropertyRow(new Label("ShaderGUI")); m_ShaderGUITextField = new TextField(); m_OverrideFieldRow.Add(m_ShaderGUITextField, (text) => { text.isDelayed = true; text.RegisterValueChangedCallback(ChangeShaderGUIOverride); }); // Set up such that both fields have the correct values (if displayed) & spawn warning if needed ProcessOverrideEnabledToggle(m_CanChangeShaderGUI.OverrideEnabled); m_PropertySheet.tooltip = k_ShaderGUIToolTip; return(m_PropertySheet); }
private void ChangeIsUse(ChangeEvent <bool> evt) { Toggle isUseToggle = root.Q <Toggle>("IsUse"); isUseToggle.value = evt.newValue; EditorPrefs.SetBool("OverrideMonoBehaviour_IsUse", evt.newValue); }
public BooleanSetFlagNode CreateBoolSetFlagNode(bool flagBool, string flagName, Vector2 mousePosition) { var setFlagNode = new BooleanSetFlagNode { title = "SetFlagNode", FlagName = flagName, FlagBool = flagBool, GUID = Guid.NewGuid().ToString() }; var inputPort = GeneratePort(setFlagNode, Direction.Input, Port.Capacity.Multi); inputPort.portName = "Input"; setFlagNode.inputContainer.Add(inputPort); var generatedPort = GeneratePort(setFlagNode, Direction.Output); generatedPort.portName = "Next"; generatedPort.name = "Next"; setFlagNode.outputContainer.Add(generatedPort); setFlagNode.styleSheets.Add(Resources.Load <StyleSheet>("FlagNode")); var textFieldTarget = new TextField { name = "FlagName", value = flagName, label = "FlagName\n" }; textFieldTarget.RegisterValueChangedCallback(evt => { setFlagNode.FlagName = evt.newValue; }); setFlagNode.mainContainer.Add(textFieldTarget); var boolFieldTarget = new UnityEngine.UIElements.Toggle { name = "FlagSet", value = flagBool, label = "FlagSet\n" }; boolFieldTarget.RegisterValueChangedCallback(evt => { setFlagNode.FlagBool = evt.newValue; }); setFlagNode.mainContainer.Add(boolFieldTarget); setFlagNode.RefreshExpandedState(); setFlagNode.RefreshPorts(); setFlagNode.SetPosition(new Rect(mousePosition, defaultNodeSize)); return(setFlagNode); }
void BuildBooleanPropertyField(BooleanShaderProperty property) { var field = new Toggle() { value = property.value }; field.OnToggleChanged(evt => { graph.owner.RegisterCompleteObjectUndo("Change property value"); property.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); }
void BuildBooleanKeywordField(ShaderKeyword keyword) { // Default field var field = new Toggle() { value = keyword.value == 1 }; field.OnToggleChanged(evt => { graph.owner.RegisterCompleteObjectUndo("Change property value"); keyword.value = evt.newValue ? 1 : 0; DirtyNodes(ModificationScope.Graph); }); AddRow("Default", field); }
public void OnEnable() { // Each editor window contains a root VisualElement object root = rootVisualElement; // Import UXML var visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/2/Editor/OverrideMonoBehaviourWindow.uxml"); var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/2/Editor/OverrideMonoBehaviourWindow.uss"); VisualElement labelFromUXML = visualTree.CloneTree(); labelFromUXML.styleSheets.Add(styleSheet); root.Add(labelFromUXML); TextField namespaceField = root.Q <TextField>("Namespace"); Toggle isUseToggle = root.Q <Toggle>("IsUse"); namespaceField.value = EditorPrefs.GetString("OverrideMonoBehaviour_Namespace", "HelloWorld"); isUseToggle.value = EditorPrefs.GetBool("OverrideMonoBehaviour_IsUse", true); namespaceField.RegisterCallback <ChangeEvent <string> >(ChangeNamespace); isUseToggle.RegisterCallback <ChangeEvent <bool> >(ChangeIsUse); }
public void OnEnable() { var root = this.rootVisualElement; root.style.paddingTop = new StyleLength(10f); root.style.paddingBottom = new StyleLength(10f); root.style.paddingLeft = new StyleLength(10f); root.style.paddingRight = new StyleLength(10f); UnityEngine.UIElements.Toggle performanceToggle = new UnityEngine.UIElements.Toggle("Use approximation for performance: "); performanceToggle.value = false; root.Add(performanceToggle); UnityEditor.UIElements.FloatField decibelField = new UnityEditor.UIElements.FloatField("Decibel (dB)"); root.Add(decibelField); UnityEditor.UIElements.FloatField amplitudeField = new UnityEditor.UIElements.FloatField("Normalized Value (0-1)"); root.Add(amplitudeField); amplitudeField.value = AudioValuesConverter.ConvertDecibelVolumeToLinearVolume(decibelField.value, performanceToggle.value); decibelField.RegisterCallback <ChangeEvent <float> >(evt => { amplitudeField.value = AudioValuesConverter.ConvertDecibelVolumeToLinearVolume(decibelField.value, performanceToggle.value); amplitudeField.value = Mathf.Clamp01(amplitudeField.value); decibelField.value = Mathf.Clamp(decibelField.value, -80f, 0f); }); amplitudeField.RegisterCallback <ChangeEvent <float> >(evt => { decibelField.value = AudioValuesConverter.ConvertLinearVolumeToDecibelVolume(amplitudeField.value, performanceToggle.value); decibelField.value = Mathf.Clamp(decibelField.value, -80f, 0f); amplitudeField.value = Mathf.Clamp01(amplitudeField.value); }); }
public BlackboardFieldPropertyView(BlackboardField blackboardField, GraphData graph, AbstractShaderProperty property) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/ShaderGraphBlackboard")); m_BlackboardField = blackboardField; m_Graph = graph; m_Property = property; if (!m_Graph.isSubGraph) { if (property.isExposable) { m_ExposedToogle = new Toggle(); m_ExposedToogle.OnToggleChanged(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Exposed Toggle"); if (m_OnExposedToggle != null) { m_OnExposedToggle(); } property.generatePropertyBlock = evt.newValue; if (property.generatePropertyBlock) { m_BlackboardField.icon = BlackboardProvider.exposedIcon; } else { m_BlackboardField.icon = null; } DirtyNodes(ModificationScope.Graph); }); m_ExposedToogle.value = property.generatePropertyBlock; AddRow("Exposed", m_ExposedToogle); } if (property.isExposable) { m_ReferenceNameField = new TextField(512, false, false, ' '); m_ReferenceNameField.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyNameReferenceField")); AddRow("Reference", m_ReferenceNameField); m_ReferenceNameField.value = property.referenceName; m_ReferenceNameField.isDelayed = true; m_ReferenceNameField.RegisterValueChangedCallback(newName => { m_Graph.owner.RegisterCompleteObjectUndo("Change Reference Name"); if (m_ReferenceNameField.value != m_Property.referenceName) { string newReferenceName = m_Graph.SanitizePropertyReferenceName(newName.newValue, property.guid); property.overrideReferenceName = newReferenceName; } m_ReferenceNameField.value = property.referenceName; if (string.IsNullOrEmpty(property.overrideReferenceName)) { m_ReferenceNameField.RemoveFromClassList("modified"); } else { m_ReferenceNameField.AddToClassList("modified"); } DirtyNodes(ModificationScope.Graph); UpdateReferenceNameResetMenu(); }); if (!string.IsNullOrEmpty(property.overrideReferenceName)) { m_ReferenceNameField.AddToClassList("modified"); } } } // Key Undo callbacks for input fields EventCallback <KeyDownEvent> keyDownCallback = new EventCallback <KeyDownEvent>(evt => { // Record Undo for input field edit if (m_UndoGroup == -1) { m_UndoGroup = Undo.GetCurrentGroup(); m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); } // Handle scaping input field edit if (evt.keyCode == KeyCode.Escape && m_UndoGroup > -1) { Undo.RevertAllDownToGroup(m_UndoGroup); m_UndoGroup = -1; evt.StopPropagation(); } // Dont record Undo again until input field is unfocused m_UndoGroup++; this.MarkDirtyRepaint(); }); EventCallback <FocusOutEvent> focusOutCallback = new EventCallback <FocusOutEvent>(evt => { // Reset UndoGroup when done editing input field m_UndoGroup = -1; }); if (property is Vector1ShaderProperty) { var floatProperty = (Vector1ShaderProperty)property; BuildVector1PropertyView(floatProperty); } else if (property is Vector2ShaderProperty) { var vectorProperty = (Vector2ShaderProperty)property; var field = new Vector2Field { value = vectorProperty.value }; field.Q("unity-x-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-x-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); field.Q("unity-y-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-y-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); // Called after KeyDownEvent field.RegisterValueChangedCallback(evt => { // Only true when setting value via FieldMouseDragger // Undo recorded once per dragger release if (m_UndoGroup == -1) { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); } vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Vector3ShaderProperty) { var vectorProperty = (Vector3ShaderProperty)property; var field = new Vector3Field { value = vectorProperty.value }; field.Q("unity-x-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-x-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); field.Q("unity-y-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-y-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); field.Q("unity-z-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-z-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); // Called after KeyDownEvent field.RegisterValueChangedCallback(evt => { // Only true when setting value via FieldMouseDragger // Undo recorded once per dragger release if (m_UndoGroup == -1) { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); } vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Vector4ShaderProperty) { var vectorProperty = (Vector4ShaderProperty)property; var field = new Vector4Field { value = vectorProperty.value }; field.Q("unity-x-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-x-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); field.Q("unity-y-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-y-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); field.Q("unity-z-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-z-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); field.Q("unity-w-input").Q("unity-text-input").RegisterCallback <KeyDownEvent>(keyDownCallback); field.Q("unity-w-input").Q("unity-text-input").RegisterCallback <FocusOutEvent>(focusOutCallback); // Called after KeyDownEvent field.RegisterValueChangedCallback(evt => { // Only true when setting value via FieldMouseDragger // Undo recorded once per dragger release if (m_UndoGroup == -1) { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); } vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ColorShaderProperty) { var colorProperty = (ColorShaderProperty)property; var colorField = new ColorField { value = property.defaultValue, showEyeDropper = false, hdr = colorProperty.colorMode == ColorMode.HDR }; colorField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); colorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", colorField); if (!m_Graph.isSubGraph) { var colorModeField = new EnumField((Enum)colorProperty.colorMode); colorModeField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Color Mode"); if (colorProperty.colorMode == (ColorMode)evt.newValue) { return; } colorProperty.colorMode = (ColorMode)evt.newValue; colorField.hdr = colorProperty.colorMode == ColorMode.HDR; colorField.MarkDirtyRepaint(); DirtyNodes(); }); AddRow("Mode", colorModeField); } } else if (property is TextureShaderProperty) { var textureProperty = (TextureShaderProperty)property; var field = new ObjectField { value = textureProperty.value.texture, objectType = typeof(Texture) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); textureProperty.value.texture = (Texture)evt.newValue; DirtyNodes(); }); AddRow("Default", field); if (!m_Graph.isSubGraph) { var defaultModeField = new EnumField((Enum)textureProperty.defaultType); defaultModeField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Texture Mode"); if (textureProperty.defaultType == (TextureShaderProperty.DefaultType)evt.newValue) { return; } textureProperty.defaultType = (TextureShaderProperty.DefaultType)evt.newValue; DirtyNodes(ModificationScope.Graph); }); void ToggleDefaultModeFieldEnabled() { defaultModeField.SetEnabled(!defaultModeField.enabledSelf); } m_OnExposedToggle += ToggleDefaultModeFieldEnabled; AddRow("Mode", defaultModeField); } } else if (property is Texture2DArrayShaderProperty) { var textureProperty = (Texture2DArrayShaderProperty)property; var field = new ObjectField { value = textureProperty.value.textureArray, objectType = typeof(Texture2DArray) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); textureProperty.value.textureArray = (Texture2DArray)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Texture3DShaderProperty) { var textureProperty = (Texture3DShaderProperty)property; var field = new ObjectField { value = textureProperty.value.texture, objectType = typeof(Texture3D) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); textureProperty.value.texture = (Texture3D)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is CubemapShaderProperty) { var cubemapProperty = (CubemapShaderProperty)property; var field = new ObjectField { value = cubemapProperty.value.cubemap, objectType = typeof(Cubemap) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); cubemapProperty.value.cubemap = (Cubemap)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is BooleanShaderProperty) { var booleanProperty = (BooleanShaderProperty)property; EventCallback <ChangeEvent <bool> > onBooleanChanged = evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); booleanProperty.value = evt.newValue; DirtyNodes(); }; var field = new Toggle(); field.OnToggleChanged(onBooleanChanged); field.value = booleanProperty.value; AddRow("Default", field); } else if (property is Matrix2ShaderProperty) { var matrix2Property = (Matrix2ShaderProperty)property; var row0Field = new Vector2Field { value = matrix2Property.value.GetRow(0) }; row0Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector2 row1 = matrix2Property.value.GetRow(1); matrix2Property.value = new Matrix4x4() { m00 = evt.newValue.x, m01 = evt.newValue.y, m02 = 0, m03 = 0, m10 = row1.x, m11 = row1.y, m12 = 0, m13 = 0, m20 = 0, m21 = 0, m22 = 0, m23 = 0, m30 = 0, m31 = 0, m32 = 0, m33 = 0, }; DirtyNodes(); }); AddRow("Default", row0Field); var row1Field = new Vector2Field { value = matrix2Property.value.GetRow(1) }; row1Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector2 row0 = matrix2Property.value.GetRow(0); matrix2Property.value = new Matrix4x4() { m00 = row0.x, m01 = row0.y, m02 = 0, m03 = 0, m10 = evt.newValue.x, m11 = evt.newValue.y, m12 = 0, m13 = 0, m20 = 0, m21 = 0, m22 = 0, m23 = 0, m30 = 0, m31 = 0, m32 = 0, m33 = 0, }; DirtyNodes(); }); AddRow("", row1Field); } else if (property is Matrix3ShaderProperty) { var matrix3Property = (Matrix3ShaderProperty)property; var row0Field = new Vector3Field { value = matrix3Property.value.GetRow(0) }; row0Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector3 row1 = matrix3Property.value.GetRow(1); Vector3 row2 = matrix3Property.value.GetRow(2); matrix3Property.value = new Matrix4x4() { m00 = evt.newValue.x, m01 = evt.newValue.y, m02 = evt.newValue.z, m03 = 0, m10 = row1.x, m11 = row1.y, m12 = row1.z, m13 = 0, m20 = row2.x, m21 = row2.y, m22 = row2.z, m23 = 0, m30 = 0, m31 = 0, m32 = 0, m33 = 0, }; DirtyNodes(); }); AddRow("Default", row0Field); var row1Field = new Vector3Field { value = matrix3Property.value.GetRow(1) }; row1Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector3 row0 = matrix3Property.value.GetRow(0); Vector3 row2 = matrix3Property.value.GetRow(2); matrix3Property.value = new Matrix4x4() { m00 = row0.x, m01 = row0.y, m02 = row0.z, m03 = 0, m10 = evt.newValue.x, m11 = evt.newValue.y, m12 = evt.newValue.z, m13 = 0, m20 = row2.x, m21 = row2.y, m22 = row2.z, m23 = 0, m30 = 0, m31 = 0, m32 = 0, m33 = 0, }; DirtyNodes(); }); AddRow("", row1Field); var row2Field = new Vector3Field { value = matrix3Property.value.GetRow(2) }; row2Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector3 row0 = matrix3Property.value.GetRow(0); Vector3 row1 = matrix3Property.value.GetRow(1); matrix3Property.value = new Matrix4x4() { m00 = row0.x, m01 = row0.y, m02 = row0.z, m03 = 0, m10 = row1.x, m11 = row1.y, m12 = row1.z, m13 = 0, m20 = evt.newValue.x, m21 = evt.newValue.y, m22 = evt.newValue.z, m23 = 0, m30 = 0, m31 = 0, m32 = 0, m33 = 0, }; DirtyNodes(); }); AddRow("", row2Field); } else if (property is Matrix4ShaderProperty) { var matrix4Property = (Matrix4ShaderProperty)property; var row0Field = new Vector4Field { value = matrix4Property.value.GetRow(0) }; row0Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector4 row1 = matrix4Property.value.GetRow(1); Vector4 row2 = matrix4Property.value.GetRow(2); Vector4 row3 = matrix4Property.value.GetRow(3); matrix4Property.value = new Matrix4x4() { m00 = evt.newValue.x, m01 = evt.newValue.y, m02 = evt.newValue.z, m03 = evt.newValue.w, m10 = row1.x, m11 = row1.y, m12 = row1.z, m13 = row1.w, m20 = row2.x, m21 = row2.y, m22 = row2.z, m23 = row2.w, m30 = row3.x, m31 = row3.y, m32 = row3.z, m33 = row3.w, }; DirtyNodes(); }); AddRow("Default", row0Field); var row1Field = new Vector4Field { value = matrix4Property.value.GetRow(1) }; row1Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector4 row0 = matrix4Property.value.GetRow(0); Vector4 row2 = matrix4Property.value.GetRow(2); Vector4 row3 = matrix4Property.value.GetRow(3); matrix4Property.value = new Matrix4x4() { m00 = row0.x, m01 = row0.y, m02 = row0.z, m03 = row0.w, m10 = evt.newValue.x, m11 = evt.newValue.y, m12 = evt.newValue.z, m13 = evt.newValue.w, m20 = row2.x, m21 = row2.y, m22 = row2.z, m23 = row2.w, m30 = row3.x, m31 = row3.y, m32 = row3.z, m33 = row3.w, }; DirtyNodes(); }); AddRow("", row1Field); var row2Field = new Vector4Field { value = matrix4Property.value.GetRow(2) }; row2Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector4 row0 = matrix4Property.value.GetRow(0); Vector4 row1 = matrix4Property.value.GetRow(1); Vector4 row3 = matrix4Property.value.GetRow(3); matrix4Property.value = new Matrix4x4() { m00 = row0.x, m01 = row0.y, m02 = row0.z, m03 = row0.w, m10 = row1.x, m11 = row1.y, m12 = row1.z, m13 = row1.w, m20 = evt.newValue.x, m21 = evt.newValue.y, m22 = evt.newValue.z, m23 = evt.newValue.w, m30 = row3.x, m31 = row3.y, m32 = row3.z, m33 = row3.w, }; DirtyNodes(); }); AddRow("", row2Field); var row3Field = new Vector4Field { value = matrix4Property.value.GetRow(3) }; row3Field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); Vector4 row0 = matrix4Property.value.GetRow(0); Vector4 row1 = matrix4Property.value.GetRow(1); Vector4 row2 = matrix4Property.value.GetRow(2); matrix4Property.value = new Matrix4x4() { m00 = row0.x, m01 = row0.y, m02 = row0.z, m03 = row0.w, m10 = row1.x, m11 = row1.y, m12 = row1.z, m13 = row1.w, m20 = row2.x, m21 = row2.y, m22 = row2.z, m23 = row2.w, m30 = evt.newValue.x, m31 = evt.newValue.y, m32 = evt.newValue.z, m33 = evt.newValue.w, }; DirtyNodes(); }); AddRow("", row3Field); } else if (property is SamplerStateShaderProperty) { var samplerStateProperty = (SamplerStateShaderProperty)property; var filterField = new EnumField(samplerStateProperty.value.filter); filterField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); TextureSamplerState state = samplerStateProperty.value; state.filter = (TextureSamplerState.FilterMode)evt.newValue; samplerStateProperty.value = state; DirtyNodes(ModificationScope.Graph); }); AddRow("Filter", filterField); var wrapField = new EnumField(samplerStateProperty.value.wrap); wrapField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); TextureSamplerState state = samplerStateProperty.value; state.wrap = (TextureSamplerState.WrapMode)evt.newValue; samplerStateProperty.value = state; DirtyNodes(ModificationScope.Graph); }); AddRow("Wrap", wrapField); } else if (property is GradientShaderProperty) { var gradientProperty = (GradientShaderProperty)property; var field = new GradientField { value = gradientProperty.value }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); gradientProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } var precisionField = new EnumField((Enum)property.precision); precisionField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Precision"); if (property.precision == (Precision)evt.newValue) { return; } property.precision = (Precision)evt.newValue; m_Graph.ValidateGraph(); precisionField.MarkDirtyRepaint(); DirtyNodes(); }); AddRow("Precision", precisionField); AddToClassList("sgblackboardFieldPropertyView"); UpdateReferenceNameResetMenu(); }
public MoveToPosNode CreateMoveToPosNode(string targetObject, string referenceObject, Vector3 posOffset, bool wait, Vector2 mousePosition) { var moveToPosNode = new MoveToPosNode { title = "MoveToPosNode", TargetObject = targetObject, ReferenceObject = referenceObject, PosOffset = posOffset, Wait = wait, GUID = Guid.NewGuid().ToString() }; var inputPort = GeneratePort(moveToPosNode, Direction.Input, Port.Capacity.Multi); inputPort.portName = "Input"; moveToPosNode.inputContainer.Add(inputPort); var generatedPort = GeneratePort(moveToPosNode, Direction.Output); generatedPort.portName = "Next"; generatedPort.name = "Next"; moveToPosNode.outputContainer.Add(generatedPort); moveToPosNode.styleSheets.Add(Resources.Load <StyleSheet>("FlagNode")); var textFieldTarget = new TextField { name = "TargetObject", value = targetObject, label = "TargetObject\n" }; textFieldTarget.RegisterValueChangedCallback(evt => { moveToPosNode.TargetObject = evt.newValue; }); moveToPosNode.mainContainer.Add(textFieldTarget); textFieldTarget = new TextField { name = "ReferenceObject", value = referenceObject, label = "ReferenceObject\n" }; textFieldTarget.RegisterValueChangedCallback(evt => { moveToPosNode.ReferenceObject = evt.newValue; }); moveToPosNode.mainContainer.Add(textFieldTarget); var vector3FieldTarget = new Vector3Field { name = "PositionOffset", value = posOffset, label = "PositionOffset\n" }; vector3FieldTarget.RegisterValueChangedCallback(evt => { moveToPosNode.PosOffset = evt.newValue; }); moveToPosNode.mainContainer.Add(vector3FieldTarget); var boolFieldTarget = new UnityEngine.UIElements.Toggle { name = "Wait", value = wait, label = "Wait\n" }; boolFieldTarget.RegisterValueChangedCallback(evt => { moveToPosNode.Wait = evt.newValue; }); moveToPosNode.mainContainer.Add(boolFieldTarget); moveToPosNode.RefreshExpandedState(); moveToPosNode.RefreshPorts(); moveToPosNode.SetPosition(new Rect(mousePosition, defaultNodeSize)); return(moveToPosNode); }
void OnEnable() { m_LabelConfigTypes = AddToConfigWindow.FindAllSubTypes(typeof(LabelConfig <>)); var mySerializedObject = new SerializedObject(serializedObject.targetObjects[0]); m_Labeling = mySerializedObject.targetObject as Labeling; m_UxmlPath = m_UxmlDir + "Labeling_Main.uxml"; m_Root = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(m_UxmlPath).CloneTree(); m_CurrentLabelsListView = m_Root.Q <ListView>("current-labels-listview"); m_SuggestedLabelsListViewFromName = m_Root.Q <ListView>("suggested-labels-name-listview"); m_SuggestedLabelsListViewFromPath = m_Root.Q <ListView>("suggested-labels-path-listview"); m_LabelConfigsScrollView = m_Root.Q <ScrollView>("label-configs-scrollview"); m_SuggestedOnNamePanel = m_Root.Q <VisualElement>("suggested-labels-from-name"); m_SuggestedOnPathPanel = m_Root.Q <VisualElement>("suggested-labels-from-path"); m_AddButton = m_Root.Q <Button>("add-label"); m_CurrentAutoLabel = m_Root.Q <Label>("current-auto-label"); m_CurrentAutoLabelTitle = m_Root.Q <Label>("current-auto-label-title"); m_AutoLabelingToggle = m_Root.Q <Toggle>("auto-or-manual-toggle"); m_ManualLabelingContainer = m_Root.Q <VisualElement>("manual-labeling"); m_AutoLabelingContainer = m_Root.Q <VisualElement>("automatic-labeling"); m_FromLabelConfigsContainer = m_Root.Q <VisualElement>("from-label-configs"); m_SuggestedLabelsContainer = m_Root.Q <VisualElement>("suggested-labels"); m_AddAutoLabelToConfButton = m_Root.Q <Button>("add-auto-label-to-config"); m_AddManualLabelsTitle = m_Root.Q <Label>("add-manual-labels-title"); var dropdownParent = m_Root.Q <VisualElement>("drop-down-parent"); m_ItIsPossibleToAddMultipleAutoLabelsToConfig = false; InitializeLabelingSchemes(dropdownParent); AssesAutoLabelingStatus(); m_FirstItemLabelsArray = serializedObject.FindProperty(nameof(Labeling.labels)); if (serializedObject.targetObjects.Length > 1) { var addedTitle = m_Root.Q <Label>("added-labels-title"); addedTitle.text = "Common Labels of Selected Items"; m_SuggestedOnNamePanel.style.display = DisplayStyle.None; m_AddAutoLabelToConfButton.text = "Add Automatic Labels of All Selected Assets to Config..."; } else { m_AddAutoLabelToConfButton.text = "Add to Label Config..."; } m_AddAutoLabelToConfButton.clicked += () => { AddToConfigWindow.ShowWindow(CreateUnionOfAllLabels().ToList()); }; m_AddButton.clicked += () => { var labelsUnion = CreateUnionOfAllLabels(); var newLabel = FindNewLabelValue(labelsUnion); foreach (var targetObject in targets) { if (targetObject is Labeling labeling) { var serializedLabelingObject2 = new SerializedObject(labeling); var serializedLabelArray2 = serializedLabelingObject2.FindProperty(nameof(Labeling.labels)); serializedLabelArray2.InsertArrayElementAtIndex(serializedLabelArray2.arraySize); serializedLabelArray2.GetArrayElementAtIndex(serializedLabelArray2.arraySize - 1).stringValue = newLabel; serializedLabelingObject2.ApplyModifiedProperties(); serializedLabelingObject2.SetIsDifferentCacheDirty(); serializedObject.SetIsDifferentCacheDirty(); } } ChangesHappeningInForeground = true; RefreshManualLabelingData(); }; m_AutoLabelingToggle.RegisterValueChangedCallback(evt => { AutoLabelToggleChanged(); }); ChangesHappeningInForeground = true; m_Root.schedule.Execute(CheckForModelChanges).Every(30); }
public BlackboardFieldPropertyView(AbstractNodeGraph graph, INodeProperty property) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/NodeGraphBlackboard")); m_Graph = graph; m_Reference = new TextField(); m_Reference.RegisterValueChangedCallback(evt => { property.reference = evt.newValue; DirtyNodes(ModificationScope.Graph); }); m_Reference.value = property.reference; AddRow("Reference", m_Reference); if (property is ValueProperty <float> ) { var floatProperty = (ValueProperty <float>)property; FloatField floatField = new FloatField { value = floatProperty.value }; floatField.RegisterValueChangedCallback(evt => { floatProperty.value = (float)evt.newValue; DirtyNodes(); }); AddRow("Default", floatField); /*if (floatProperty.floatType == FloatType.Slider) * { * var minField = new FloatField { value = floatProperty.rangeValues.x }; * minField.OnValueChanged(minEvt => * { * floatProperty.rangeValues = new Vector2((float)minEvt.newValue, floatProperty.rangeValues.y); * floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); * floatField.value = floatProperty.value; * DirtyNodes(); * }); * minRow = AddRow("Min", minField); * var maxField = new FloatField { value = floatProperty.rangeValues.y }; * maxField.OnValueChanged(maxEvt => * { * floatProperty.rangeValues = new Vector2(floatProperty.rangeValues.x, (float)maxEvt.newValue); * floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); * floatField.value = floatProperty.value; * DirtyNodes(); * }); * maxRow = AddRow("Max", maxField); * }*/ } else if (property is ValueProperty <int> ) { var intProperty = (ValueProperty <int>)property; var field = new IntegerField { value = intProperty.value }; field.RegisterValueChangedCallback(intEvt => { intProperty.value = intEvt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ValueProperty <Vector2> ) { var vectorProperty = (ValueProperty <Vector2>)property; var field = new Vector2Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ValueProperty <Vector3> ) { var vectorProperty = (ValueProperty <Vector3>)property; var field = new Vector3Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ValueProperty <Vector4> ) { var vectorProperty = (ValueProperty <Vector4>)property; var field = new Vector4Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ValueProperty <Color> ) { var colorProperty = (ValueProperty <Color>)property; //todo add HDR var colorField = new ColorField { value = (Color)property.defaultValue, showEyeDropper = false }; colorField.RegisterValueChangedCallback(evt => { colorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", colorField); } else if (property is ValueProperty <Texture2D> ) { var textureProperty = (ValueProperty <Texture2D>)property; var field = new ObjectField { value = textureProperty.value, objectType = typeof(Texture2D) }; field.RegisterValueChangedCallback(evt => { textureProperty.value = (Texture2D)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ValueProperty <Cubemap> ) { var cubemapProperty = (ValueProperty <Cubemap>)property; var field = new ObjectField { value = cubemapProperty.value, objectType = typeof(Cubemap) }; field.RegisterValueChangedCallback(evt => { cubemapProperty.value = (Cubemap)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ValueProperty <bool> ) { var booleanProperty = (ValueProperty <bool>)property; EventCallback <ChangeEvent <bool> > onBooleanChanged = evt => { booleanProperty.value = evt.newValue; DirtyNodes(); }; var field = new Toggle(); field.RegisterValueChangedCallback(onBooleanChanged); field.value = booleanProperty.value; AddRow("Default", field); } // AddRow("Type", new TextField()); // AddRow("Exposed", new Toggle(null)); // AddRow("Range", new Toggle(null)); // AddRow("Default", new TextField()); // AddRow("Tooltip", new TextField()); AddToClassList("sgblackboardFieldPropertyView"); }
public BlackboardFieldPropertyView(BlackboardField blackboardField, AbstractMaterialGraph graph, IShaderProperty property) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/ShaderGraphBlackboard")); m_BlackboardField = blackboardField; m_Graph = graph; m_Property = property; m_ExposedToogle = new Toggle(); m_ExposedToogle.OnToggleChanged(evt => { property.generatePropertyBlock = evt.newValue; if (property.generatePropertyBlock) { m_BlackboardField.icon = BlackboardProvider.exposedIcon; } else { m_BlackboardField.icon = null; } DirtyNodes(ModificationScope.Graph); }); m_ExposedToogle.value = property.generatePropertyBlock; AddRow("Exposed", m_ExposedToogle); m_ReferenceNameField = new TextField(512, false, false, ' '); m_ReferenceNameField.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyNameReferenceField")); AddRow("Reference", m_ReferenceNameField); m_ReferenceNameField.value = property.referenceName; m_ReferenceNameField.isDelayed = true; m_ReferenceNameField.RegisterValueChangedCallback(newName => { if (m_ReferenceNameField.value != m_Property.referenceName) { string newReferenceName = m_Graph.SanitizePropertyReferenceName(newName.newValue, property.guid); property.overrideReferenceName = newReferenceName; } m_ReferenceNameField.value = property.referenceName; if (string.IsNullOrEmpty(property.overrideReferenceName)) { m_ReferenceNameField.RemoveFromClassList("modified"); } else { m_ReferenceNameField.AddToClassList("modified"); } DirtyNodes(ModificationScope.Graph); UpdateReferenceNameResetMenu(); }); if (!string.IsNullOrEmpty(property.overrideReferenceName)) { m_ReferenceNameField.AddToClassList("modified"); } if (property is Vector1ShaderProperty) { VisualElement floatRow = new VisualElement(); VisualElement intRow = new VisualElement(); VisualElement modeRow = new VisualElement(); VisualElement minRow = new VisualElement(); VisualElement maxRow = new VisualElement(); FloatField floatField = null; var floatProperty = (Vector1ShaderProperty)property; if (floatProperty.floatType == FloatType.Integer) { var field = new IntegerField { value = (int)floatProperty.value }; field.RegisterValueChangedCallback(intEvt => { floatProperty.value = (float)intEvt.newValue; DirtyNodes(); }); intRow = AddRow("Default", field); } else { floatField = new FloatField { value = floatProperty.value }; floatField.RegisterValueChangedCallback(evt => { floatProperty.value = (float)evt.newValue; DirtyNodes(); }); floatRow = AddRow("Default", floatField); } var floatModeField = new EnumField((Enum)floatProperty.floatType); floatModeField.value = floatProperty.floatType; floatModeField.RegisterValueChangedCallback(evt => { if (floatProperty.floatType == (FloatType)evt.newValue) { return; } floatProperty = (Vector1ShaderProperty)property; floatProperty.floatType = (FloatType)evt.newValue; switch (floatProperty.floatType) { case FloatType.Slider: RemoveElements(new VisualElement[] { floatRow, intRow, modeRow, minRow, maxRow }); var field = new FloatField { value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x) }; floatProperty.value = (float)field.value; field.RegisterValueChangedCallback(defaultEvt => { floatProperty.value = Mathf.Max(Mathf.Min((float)defaultEvt.newValue, floatProperty.rangeValues.y), floatProperty.rangeValues.x); field.value = floatProperty.value; DirtyNodes(); }); floatRow = AddRow("Default", field); field.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); modeRow = AddRow("Mode", floatModeField); var minField = new FloatField { value = floatProperty.rangeValues.x }; minField.RegisterValueChangedCallback(minEvt => { floatProperty.rangeValues = new Vector2((float)minEvt.newValue, floatProperty.rangeValues.y); floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); field.value = floatProperty.value; DirtyNodes(); }); minRow = AddRow("Min", minField); var maxField = new FloatField { value = floatProperty.rangeValues.y }; maxField.RegisterValueChangedCallback(maxEvt => { floatProperty.rangeValues = new Vector2(floatProperty.rangeValues.x, (float)maxEvt.newValue); floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); field.value = floatProperty.value; DirtyNodes(); }); maxRow = AddRow("Max", maxField); break; case FloatType.Integer: RemoveElements(new VisualElement[] { floatRow, intRow, modeRow, minRow, maxRow }); var intField = new IntegerField { value = (int)floatProperty.value }; intField.RegisterValueChangedCallback(intEvt => { floatProperty.value = (float)intEvt.newValue; DirtyNodes(); }); intRow = AddRow("Default", intField); modeRow = AddRow("Mode", floatModeField); break; default: RemoveElements(new VisualElement[] { floatRow, intRow, modeRow, minRow, maxRow }); field = new FloatField { value = floatProperty.value }; field.RegisterValueChangedCallback(defaultEvt => { floatProperty.value = (float)defaultEvt.newValue; DirtyNodes(); }); floatRow = AddRow("Default", field); modeRow = AddRow("Mode", floatModeField); break; } DirtyNodes(); }); modeRow = AddRow("Mode", floatModeField); if (floatProperty.floatType == FloatType.Slider) { var minField = new FloatField { value = floatProperty.rangeValues.x }; minField.RegisterValueChangedCallback(minEvt => { floatProperty.rangeValues = new Vector2((float)minEvt.newValue, floatProperty.rangeValues.y); floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); floatField.value = floatProperty.value; DirtyNodes(); }); minRow = AddRow("Min", minField); var maxField = new FloatField { value = floatProperty.rangeValues.y }; maxField.RegisterValueChangedCallback(maxEvt => { floatProperty.rangeValues = new Vector2(floatProperty.rangeValues.x, (float)maxEvt.newValue); floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); floatField.value = floatProperty.value; DirtyNodes(); }); maxRow = AddRow("Max", maxField); } } else if (property is Vector2ShaderProperty) { var vectorProperty = (Vector2ShaderProperty)property; var field = new Vector2Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Vector3ShaderProperty) { var vectorProperty = (Vector3ShaderProperty)property; var field = new Vector3Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Vector4ShaderProperty) { var vectorProperty = (Vector4ShaderProperty)property; var field = new Vector4Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ColorShaderProperty) { var colorProperty = (ColorShaderProperty)property; var colorField = new ColorField { value = property.defaultValue, showEyeDropper = false, hdr = colorProperty.colorMode == ColorMode.HDR }; colorField.RegisterValueChangedCallback(evt => { colorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", colorField); var colorModeField = new EnumField((Enum)colorProperty.colorMode); colorModeField.RegisterValueChangedCallback(evt => { if (colorProperty.colorMode == (ColorMode)evt.newValue) { return; } colorProperty.colorMode = (ColorMode)evt.newValue; colorField.hdr = colorProperty.colorMode == ColorMode.HDR; colorField.MarkDirtyRepaint(); DirtyNodes(); }); AddRow("Mode", colorModeField); } else if (property is TextureShaderProperty) { var textureProperty = (TextureShaderProperty)property; var field = new ObjectField { value = textureProperty.value.texture, objectType = typeof(Texture) }; field.RegisterValueChangedCallback(evt => { textureProperty.value.texture = (Texture)evt.newValue; DirtyNodes(); }); AddRow("Default", field); var defaultModeField = new EnumField((Enum)textureProperty.defaultType); defaultModeField.RegisterValueChangedCallback(evt => { if (textureProperty.defaultType == (TextureShaderProperty.DefaultType)evt.newValue) { return; } textureProperty.defaultType = (TextureShaderProperty.DefaultType)evt.newValue; DirtyNodes(ModificationScope.Graph); }); AddRow("Mode", defaultModeField); } else if (property is Texture2DArrayShaderProperty) { var textureProperty = (Texture2DArrayShaderProperty)property; var field = new ObjectField { value = textureProperty.value.textureArray, objectType = typeof(Texture2DArray) }; field.RegisterValueChangedCallback(evt => { textureProperty.value.textureArray = (Texture2DArray)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Texture3DShaderProperty) { var textureProperty = (Texture3DShaderProperty)property; var field = new ObjectField { value = textureProperty.value.texture, objectType = typeof(Texture3D) }; field.RegisterValueChangedCallback(evt => { textureProperty.value.texture = (Texture3D)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is CubemapShaderProperty) { var cubemapProperty = (CubemapShaderProperty)property; var field = new ObjectField { value = cubemapProperty.value.cubemap, objectType = typeof(Cubemap) }; field.RegisterValueChangedCallback(evt => { cubemapProperty.value.cubemap = (Cubemap)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is BooleanShaderProperty) { var booleanProperty = (BooleanShaderProperty)property; EventCallback <ChangeEvent <bool> > onBooleanChanged = evt => { booleanProperty.value = evt.newValue; DirtyNodes(); }; var field = new Toggle(); field.OnToggleChanged(onBooleanChanged); field.value = booleanProperty.value; AddRow("Default", field); } // AddRow("Type", new TextField()); // AddRow("Exposed", new Toggle(null)); // AddRow("Range", new Toggle(null)); // AddRow("Default", new TextField()); // AddRow("Tooltip", new TextField()); AddToClassList("sgblackboardFieldPropertyView"); UpdateReferenceNameResetMenu(); }
public BlackboardFieldPropertyView(BlackboardField blackboardField, GraphData graph, AbstractShaderProperty property) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/ShaderGraphBlackboard")); m_BlackboardField = blackboardField; m_Graph = graph; m_Property = property; m_ExposedToogle = new Toggle(); m_ExposedToogle.OnToggleChanged(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Exposed Toggle"); if (m_OnExposedToggle != null) { m_OnExposedToggle(); } property.generatePropertyBlock = evt.newValue; if (property.generatePropertyBlock) { m_BlackboardField.icon = BlackboardProvider.exposedIcon; } else { m_BlackboardField.icon = null; } DirtyNodes(ModificationScope.Graph); }); m_ExposedToogle.value = property.generatePropertyBlock; AddRow("Exposed", m_ExposedToogle); m_ReferenceNameField = new TextField(512, false, false, ' '); m_ReferenceNameField.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyNameReferenceField")); AddRow("Reference", m_ReferenceNameField); m_ReferenceNameField.value = property.referenceName; m_ReferenceNameField.isDelayed = true; m_ReferenceNameField.RegisterValueChangedCallback(newName => { m_Graph.owner.RegisterCompleteObjectUndo("Change reference name"); if (m_ReferenceNameField.value != m_Property.referenceName) { string newReferenceName = m_Graph.SanitizePropertyReferenceName(newName.newValue, property.guid); property.overrideReferenceName = newReferenceName; } m_ReferenceNameField.value = property.referenceName; if (string.IsNullOrEmpty(property.overrideReferenceName)) { m_ReferenceNameField.RemoveFromClassList("modified"); } else { m_ReferenceNameField.AddToClassList("modified"); } DirtyNodes(ModificationScope.Graph); UpdateReferenceNameResetMenu(); }); if (!string.IsNullOrEmpty(property.overrideReferenceName)) { m_ReferenceNameField.AddToClassList("modified"); } if (property is Vector1ShaderProperty) { var floatProperty = (Vector1ShaderProperty)property; BuildVector1PropertyView(floatProperty); } else if (property is Vector2ShaderProperty) { var vectorProperty = (Vector2ShaderProperty)property; var field = new Vector2Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Vector3ShaderProperty) { var vectorProperty = (Vector3ShaderProperty)property; var field = new Vector3Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Vector4ShaderProperty) { var vectorProperty = (Vector4ShaderProperty)property; var field = new Vector4Field { value = vectorProperty.value }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); vectorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is ColorShaderProperty) { var colorProperty = (ColorShaderProperty)property; var colorField = new ColorField { value = property.defaultValue, showEyeDropper = false, hdr = colorProperty.colorMode == ColorMode.HDR }; colorField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); colorProperty.value = evt.newValue; DirtyNodes(); }); AddRow("Default", colorField); var colorModeField = new EnumField((Enum)colorProperty.colorMode); colorModeField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Color Mode"); if (colorProperty.colorMode == (ColorMode)evt.newValue) { return; } colorProperty.colorMode = (ColorMode)evt.newValue; colorField.hdr = colorProperty.colorMode == ColorMode.HDR; colorField.MarkDirtyRepaint(); DirtyNodes(); }); AddRow("Mode", colorModeField); } else if (property is TextureShaderProperty) { var textureProperty = (TextureShaderProperty)property; var field = new ObjectField { value = textureProperty.value.texture, objectType = typeof(Texture) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); textureProperty.value.texture = (Texture)evt.newValue; DirtyNodes(); }); AddRow("Default", field); var defaultModeField = new EnumField((Enum)textureProperty.defaultType); defaultModeField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Texture Mode"); if (textureProperty.defaultType == (TextureShaderProperty.DefaultType)evt.newValue) { return; } textureProperty.defaultType = (TextureShaderProperty.DefaultType)evt.newValue; DirtyNodes(ModificationScope.Graph); }); void ToggleDefaultModeFieldEnabled() { defaultModeField.SetEnabled(!defaultModeField.enabledSelf); } m_OnExposedToggle += ToggleDefaultModeFieldEnabled; AddRow("Mode", defaultModeField); } else if (property is Texture2DArrayShaderProperty) { var textureProperty = (Texture2DArrayShaderProperty)property; var field = new ObjectField { value = textureProperty.value.textureArray, objectType = typeof(Texture2DArray) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); textureProperty.value.textureArray = (Texture2DArray)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is Texture3DShaderProperty) { var textureProperty = (Texture3DShaderProperty)property; var field = new ObjectField { value = textureProperty.value.texture, objectType = typeof(Texture3D) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); textureProperty.value.texture = (Texture3D)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is CubemapShaderProperty) { var cubemapProperty = (CubemapShaderProperty)property; var field = new ObjectField { value = cubemapProperty.value.cubemap, objectType = typeof(Cubemap) }; field.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); cubemapProperty.value.cubemap = (Cubemap)evt.newValue; DirtyNodes(); }); AddRow("Default", field); } else if (property is BooleanShaderProperty) { var booleanProperty = (BooleanShaderProperty)property; EventCallback <ChangeEvent <bool> > onBooleanChanged = evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change property value"); booleanProperty.value = evt.newValue; DirtyNodes(); }; var field = new Toggle(); field.OnToggleChanged(onBooleanChanged); field.value = booleanProperty.value; AddRow("Default", field); } // AddRow("Type", new TextField()); // AddRow("Exposed", new Toggle(null)); // AddRow("Range", new Toggle(null)); // AddRow("Default", new TextField()); // AddRow("Tooltip", new TextField()); AddToClassList("sgblackboardFieldPropertyView"); UpdateReferenceNameResetMenu(); }
public override void BuildCustomFields(ShaderInput input) { AbstractShaderProperty property = input as AbstractShaderProperty; if (property == null) { return; } switch (input) { case Vector1ShaderProperty vector1Property: BuildVector1PropertyField(vector1Property); break; case Vector2ShaderProperty vector2Property: BuildVector2PropertyField(vector2Property); break; case Vector3ShaderProperty vector3Property: BuildVector3PropertyField(vector3Property); break; case Vector4ShaderProperty vector4Property: BuildVector4PropertyField(vector4Property); break; case ColorShaderProperty colorProperty: BuildColorPropertyField(colorProperty); break; case TextureShaderProperty texture2DProperty: BuildTexture2DPropertyField(texture2DProperty); break; case Texture2DArrayShaderProperty texture2DArrayProperty: BuildTexture2DArrayPropertyField(texture2DArrayProperty); break; case Texture3DShaderProperty texture3DProperty: BuildTexture3DPropertyField(texture3DProperty); break; case CubemapShaderProperty cubemapProperty: BuildCubemapPropertyField(cubemapProperty); break; case BooleanShaderProperty booleanProperty: BuildBooleanPropertyField(booleanProperty); break; case Matrix2ShaderProperty matrix2Property: BuildMatrix2PropertyField(matrix2Property); break; case Matrix3ShaderProperty matrix3Property: BuildMatrix3PropertyField(matrix3Property); break; case Matrix4ShaderProperty matrix4Property: BuildMatrix4PropertyField(matrix4Property); break; case SamplerStateShaderProperty samplerStateProperty: BuildSamplerStatePropertyField(samplerStateProperty); break; case GradientShaderProperty gradientProperty: BuildGradientPropertyField(gradientProperty); break; default: throw new ArgumentOutOfRangeException(); } // Precision var precisionField = new EnumField((Enum)property.precision); precisionField.RegisterValueChangedCallback(evt => { graph.owner.RegisterCompleteObjectUndo("Change Precision"); if (property.precision == (Precision)evt.newValue) { return; } property.precision = (Precision)evt.newValue; graph.ValidateGraph(); precisionField.MarkDirtyRepaint(); DirtyNodes(); }); AddRow("Precision", precisionField); if (property.isGpuInstanceable) { Toggle gpuInstancedToogle = new Toggle { value = property.gpuInstanced }; gpuInstancedToogle.OnToggleChanged(evt => { graph.owner.RegisterCompleteObjectUndo("Change Hybrid Instanced Toggle"); property.gpuInstanced = evt.newValue; DirtyNodes(ModificationScope.Graph); }); AddRow("Hybrid Instanced (experimental)", gpuInstancedToogle); } }
public void OnEnable() { // Each editor window contains a root VisualElement object VisualElement root = rootVisualElement; root.style.backgroundColor = new Color(0.125f, 0.10f, 0.1126f); unlit = unlit ?? new ColorField("Unlit"); lit = lit ?? new ColorField("Lit"); hold = hold ?? new ColorField("Hold"); teintName = new TextField("Material Teint name (Hold)"); emissionName = new TextField("Material Emission name (Hover)"); hoverChange = hoverChange ?? new Toggle("Write Hover"); holdChange = holdChange ?? new Toggle("Write Hold"); addReshapeLogicChange = addReshapeLogicChange ?? new Toggle("Write Reshape Logic"); tagName = tagName ?? new TagField("Tag"); objectName = new TextField("Object name filter"); baseObject = new ObjectField("Basis Object: Pas op, niet voeren!"); baseObject.objectType = typeof(Transform); // A stylesheet can be added to a VisualElement. // The style will be applied to the VisualElement and all of its children. var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/Scripts/Interactivity/Editor/Windows/AddHoverable.uss"); root.styleSheets.Add(styleSheet); // VisualElements objects can contain other VisualElement following a tree hierarchy. VisualElement label = new Label("Ыуат ряк, Select your colours."); button = new ToolbarButton(); var buttonRect = new Box(); button.Add(buttonRect); button.Add(new Label() { text = "GO" }); button.clickable.clicked += () => ExecuteFunctionality(); buttonRect.style.backgroundColor = new Color(0.14f, 0.13f, 0.12f, 0.95f); buttonRect.style.opacity = 0.25f; button.style.color = new Color(0.04f, 0.07f, 0.43f); root.Add(label); root.Add(unlit); root.Add(lit); root.Add(hold); root.Add(teintName); root.Add(emissionName); root.Add(hoverChange); root.Add(holdChange); root.Add(tagName); root.Add(objectName); root.Add(addReshapeLogicChange); root.Add(baseObject); root.Add(button); }
public SpeakEasyNode InitializeNode(SpeakEasyNode node, Vector2 position, NodeType nodeTypeChoice) { //Actual logic for the creation of the node //This is the UI layout //Set the color of the node so it's not super transparent. node.mainContainer.style.backgroundColor = new Color(0.25f, 0.25f, 0.25f, 0.75f); //Initialize the Label of the Node, determining if it's a SPEECH or RESPONSE node Label nodeTypeLabel = new Label(); nodeTypeLabel.style.fontSize = 15; nodeTypeLabel.style.alignSelf = Align.Center; if (node.nodeType == NodeType.speech) { nodeTypeLabel.text = "SPEECH"; node.titleContainer.style.backgroundColor = speechColor; } else { nodeTypeLabel.text = "RESPONSE"; node.titleContainer.style.backgroundColor = responseColor; } node.titleContainer.Add(nodeTypeLabel); //The integer field, this field references the index in the Localization file. It's a read only field. IntegerField stringIndexField = new IntegerField("String Index:"); stringIndexField.SetEnabled(false); //We shouldn't be able to directly edit this value. node.mainContainer.Add(stringIndexField); //This is the "text preview" which we morphed into a auto-localization file. The editor on save stores this data back into the specified XML file. TextField textPreviewField = new TextField(); textPreviewField.multiline = true; textPreviewField.style.maxWidth = 350; textPreviewField.style.whiteSpace = WhiteSpace.Normal; textPreviewField.SetEnabled(false); textPreviewField.isDelayed = true; node.mainContainer.Add(textPreviewField); //adds an ID reference so we can see the GUID Label idReference = new Label(node.nodeID); node.mainContainer.Add(idReference); idReference.style.color = new Color(0.75f, 0.75f, 0.75f); //This is the stringRefField, aka the identifier for our string. This is what we store in our file data. TextField stringRefField = new TextField("String Reference:"); stringRefField.isDelayed = true; stringRefField.RegisterValueChangedCallback(evt => { node.stringReference = evt.newValue; //set the node's string reference to the new Value Debug.Log("Saving localization data"); SetLocalizationIdentifier(node.stringIndex, evt.newValue); //Sets the localization identifier for the index if one is specified. }); node.mainContainer.Add(stringRefField); stringRefField.SetValueWithoutNotify(node.stringReference); stringIndexField.SetValueWithoutNotify(FindStringIndex(node.stringReference)); //Look up our string reference identifier and return the index if one exists. //We need to set the stringIndex of the node too. node.stringIndex = stringIndexField.value; // set the node's internal value to the stringIndexField value. textPreviewField.SetValueWithoutNotify(GetStringIndex(node.stringIndex)); //Update the localized box auto match the .. you know what this does. textPreviewField.RegisterValueChangedCallback(evt => { Debug.Log("Saving localization data"); SetLocalizationText(node.stringIndex, evt.newValue); //If we change the text in this field, update the localization table to match our new entry. }); //This button will give us a brand new spanking place in the localization file hashtag smiley face Button addNewTableEntryButton = null; //I do not understand this logic... addNewTableEntryButton = new Button(() => AddNewTableEntry(addNewTableEntryButton, node, stringIndexField, textPreviewField)) { text = "Add Table Entry" }; if (localText == null) { addNewTableEntryButton.SetEnabled(false); } node.mainContainer.Add(addNewTableEntryButton); //Check if we already have this data if (CheckIfStringReferenceExists(node.stringReference)) { //We already have our connection addNewTableEntryButton.SetEnabled(false); textPreviewField.SetEnabled(true); } //Serialize Save/Load for Audio Clips and Animation Trigger ObjectField audioField = new ObjectField("Audio Field"); audioField.objectType = typeof(AudioClip); audioField.allowSceneObjects = false; audioField.SetEnabled(false); node.mainContainer.Add(audioField); TextField animationTriggerField = new TextField("Animation Trigger"); animationTriggerField.SetEnabled(false); node.mainContainer.Add(animationTriggerField); UnityEngine.UIElements.Toggle entryPointToggle = new UnityEngine.UIElements.Toggle("Entry Point"); entryPointToggle.RegisterValueChangedCallback(evt => { node.isEntryPoint = evt.newValue; }); node.mainContainer.Add(entryPointToggle); entryPointToggle.SetValueWithoutNotify(node.isEntryPoint); IntegerField priorityField = new IntegerField("Priority:"); priorityField.RegisterValueChangedCallback(evt => { node.priority = evt.newValue; }); priorityField.SetValueWithoutNotify(node.priority); node.mainContainer.Add(priorityField); /* * ObjectField testRef = new ObjectField("OnConditional"); * testRef.objectType = typeof(SpeakEasyLogics_Test); * testRef.allowSceneObjects = false; * node.mainContainer.Add(testRef); * * ObjectField eventRef = new ObjectField("OnFire"); * eventRef.objectType = typeof(SpeakEasyLogics_Event); * eventRef.allowSceneObjects = false; * node.mainContainer.Add(eventRef); */ //adds a OnConditional reference ObjectField testRefField = new ObjectField("Test Script Ref:"); testRefField.objectType = typeof(SpeakEasyLogics_Test); testRefField.allowSceneObjects = false; testRefField.RegisterValueChangedCallback(evt => { node.scriptTest = (evt.newValue as SpeakEasyLogics_Test); //SpeakEasyNode startNode = (startPort.node as SpeakEasyNode); }); node.mainContainer.Add(testRefField); testRefField.SetValueWithoutNotify(node.scriptTest); //adds a OnFire reference ObjectField eventRefField = new ObjectField("Event Script Ref:"); eventRefField.objectType = typeof(SpeakEasyLogics_Event); eventRefField.allowSceneObjects = false; eventRefField.RegisterValueChangedCallback(evt => { node.scriptEvent = (evt.newValue as SpeakEasyLogics_Event); }); node.mainContainer.Add(eventRefField); eventRefField.SetValueWithoutNotify(node.scriptEvent); //This port is the IN connection, this is where we will lead the conversation TO. The Input can recieve a number of connections from conversation choices Port inputPort = GetPortInstance(node, Direction.Input, Port.Capacity.Multi); node.inputConnection = inputPort; inputPort.portName = "Connections"; node.inputContainer.Add(inputPort); Port outputPort = GetPortInstance(node, Direction.Output, Port.Capacity.Multi); node.outputConnection = outputPort; outputPort.portName = "Responses"; node.outputContainer.Add(outputPort); // //node.outputContainer.style.flexDirection <-- this is what I was looking for last night! controls the direction of the container? node.RefreshExpandedState(); node.RefreshPorts(); node.SetPosition(new Rect(position, defaultNodeSize)); Button debugTestValues = new Button(() => PrintValues(node, inputPort, outputPort)) { text = "Print Values" }; node.mainContainer.Add(debugTestValues); return(node); }
public static void BuildInspectorPropertiesElement(string elementPath, IEditorContainer editor, System.Collections.Generic.HashSet <System.Type> usedComponents, SerializedProperty obj, UnityEngine.UIElements.VisualElement container, bool noFields, System.Action <int, PropertyField> onBuild = null) { obj = obj.Copy(); container.Clear(); var source = obj.Copy(); SerializedProperty iterator = obj; if (iterator.NextVisible(true) == false) { return; } if (iterator.NextVisible(true) == false) { return; } var depth = iterator.depth; var i = 0; var iteratorNext = iterator.Copy(); do { if (string.IsNullOrEmpty(elementPath) == false) { iterator = iteratorNext.FindPropertyRelative(elementPath); } else { iterator = iteratorNext; } if (iterator.propertyType != SerializedPropertyType.ManagedReference) { continue; } var element = new VisualElement(); element.AddToClassList("element"); var itCopy = iterator.Copy(); GetTypeFromManagedReferenceFullTypeName(iterator.managedReferenceFullTypename, out var type); element.AddToClassList(i % 2 == 0 ? "even" : "odd"); element.RegisterCallback <UnityEngine.UIElements.ContextClickEvent, int>((evt, idx) => { var menu = new GenericMenu(); if (usedComponents != null) { menu.AddItem(new GUIContent("Delete"), false, () => { RemoveComponent((DataConfigEditor)editor, usedComponents, source, type, noFields); editor.Save(); BuildInspectorProperties(editor, usedComponents, source, container, noFields); }); menu.AddItem(new GUIContent("Copy JSON"), false, () => { var instance = itCopy.GetValue(); var json = JsonUtility.ToJson(instance, true); EditorGUIUtility.systemCopyBuffer = json; }); } editor.OnComponentMenu(menu, idx); menu.ShowAsContext(); }, i); if (type != null && usedComponents?.Contains(type) == false) { usedComponents?.Add(type); } if (type == null) { var label = new UnityEngine.UIElements.Label("MISSING: " + iterator.managedReferenceFullTypename); element.name = "missing"; label.AddToClassList("inner-element"); label.AddToClassList("missing-label"); element.Add(label); } else if (iterator.hasVisibleChildren == false || noFields == true) { var horizontal = new UnityEngine.UIElements.VisualElement(); horizontal.AddToClassList("inner-element"); horizontal.AddToClassList("no-fields-container"); element.name = type.Name; var toggle = new UnityEngine.UIElements.Toggle(); toggle.AddToClassList("no-fields-toggle"); toggle.SetEnabled(false); toggle.SetValueWithoutNotify(true); horizontal.Add(toggle); var label = new UnityEngine.UIElements.Label(GUILayoutExt.GetStringCamelCaseSpace(type.Name)); label.AddToClassList("no-fields-label"); horizontal.Add(label); element.Add(horizontal); } else { var label = GUILayoutExt.GetStringCamelCaseSpace(type.Name); if (iterator.hasVisibleChildren == true) { var childs = iterator.Copy(); //var height = EditorUtilities.GetPropertyHeight(childs, true, new GUIContent(label)); var cnt = EditorUtilities.GetPropertyChildCount(childs); if (cnt == 1 /*&& height <= 22f*/) { iterator.NextVisible(true); } } var propertyField = new PropertyField(iterator.Copy(), label); propertyField.BindProperty(iterator); onBuild?.Invoke(i, propertyField); propertyField.AddToClassList("property-field"); propertyField.AddToClassList("inner-element"); element.name = type.Name; element.Add(propertyField); } if (type != null) { var helps = type.GetCustomAttributes(typeof(ComponentHelpAttribute), false); if (helps.Length > 0) { var label = new UnityEngine.UIElements.Label(((ComponentHelpAttribute)helps[0]).comment); label.AddToClassList("comment"); element.Add(label); } if (typeof(IComponentStatic).IsAssignableFrom(type) == true) { var label = new UnityEngine.UIElements.Label("Static"); label.AddToClassList("static-component"); element.AddToClassList("has-static-component"); element.Add(label); } if (typeof(IComponentShared).IsAssignableFrom(type) == true) { var label = new UnityEngine.UIElements.Label("Shared"); label.AddToClassList("shared-component"); element.AddToClassList("has-shared-component"); element.Add(label); } } container.Add(element); ++i; } while (iteratorNext.NextVisible(false) == true && depth <= iteratorNext.depth); }