internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Gradient fieldToDraw,
            string labelName,
            out VisualElement propertyGradientField,
            int indentLevel = 0)
        {
            var objectField = new GradientField {
                value = fieldToDraw
            };

            if (valueChangedCallback != null)
            {
                objectField.RegisterValueChangedCallback(evt => { valueChangedCallback((Gradient)evt.newValue); });
            }

            propertyGradientField = objectField;

            // Any core widgets used by the inspector over and over should come from some kind of factory
            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyGradientField);
            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
예제 #2
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            string fieldToDraw,
            string labelName,
            out VisualElement propertyTextField,
            int indentLevel = 0)
        {
            var propertyRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            propertyTextField = new TextField(512, false, false, ' ')
            {
                isDelayed = true
            };
            propertyRow.Add((TextField)propertyTextField,
                            textField =>
            {
                textField.value = fieldToDraw;
            });

            if (valueChangedCallback != null)
            {
                var textField = (TextField)propertyTextField;
                textField.RegisterValueChangedCallback(evt => valueChangedCallback(evt.newValue));
            }

            propertyRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(propertyRow);
        }
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            int fieldToDraw,
            string labelName,
            out VisualElement propertyFloatField,
            int indentLevel = 0)
        {
            var integerField = new IntegerField {
                value = fieldToDraw
            };

            if (valueChangedCallback != null)
            {
                integerField.RegisterValueChangedCallback(evt => { valueChangedCallback(evt.newValue); });
            }

            propertyFloatField = integerField;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyFloatField);

            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
        VisualElement CreateGUI(CustomFunctionNode node, InspectableAttribute attribute,
                                out VisualElement propertyVisualElement)
        {
            var propertySheet = new PropertySheet(PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold));

            PropertyDrawerUtils.AddDefaultNodeProperties(propertySheet, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback);

            var inputListView = new ReorderableSlotListView(node, SlotType.Input, true);

            inputListView.OnAddCallback           += list => inspectorUpdateDelegate();
            inputListView.OnRemoveCallback        += list => inspectorUpdateDelegate();
            inputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate();
            propertySheet.Add(inputListView);

            var outputListView = new ReorderableSlotListView(node, SlotType.Output, true);

            outputListView.OnAddCallback           += list => inspectorUpdateDelegate();
            outputListView.OnRemoveCallback        += list => inspectorUpdateDelegate();
            outputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate();
            propertySheet.Add(outputListView);

            propertySheet.Add(new HlslFunctionView(node));
            propertyVisualElement = null;
            return(propertySheet);
        }
예제 #5
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            ToggleData fieldToDraw,
            string labelName,
            out VisualElement propertyToggle,
            int indentLevel = 0)
        {
            var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            // Create and assign toggle as out variable here so that callers can also do additional work with enabling/disabling if needed
            propertyToggle = new Toggle();
            row.Add((Toggle)propertyToggle, (toggle) =>
            {
                toggle.value = fieldToDraw.isOn;
            });

            if (valueChangedCallback != null)
            {
                var toggle = (Toggle)propertyToggle;
                toggle.OnToggleChanged(evt => valueChangedCallback(new ToggleData(evt.newValue)));
            }

            row.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(row);
        }
        VisualElement CreateGUI(AbstractMaterialNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement)
        {
            VisualElement nodeSettings = new VisualElement();
            var           nameLabel    = PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold);

            nodeSettings.Add(nameLabel);
            if (node.sgVersion < node.latestVersion)
            {
                var help = HelpBoxRow.TryGetDeprecatedHelpBoxRow($"{node.name} Node", () =>
                {
                    m_setNodesAsDirtyCallback?.Invoke();
                    node.owner.owner.RegisterCompleteObjectUndo($"Update {node.name} Node");
                    node.ChangeVersion(node.latestVersion);
                    inspectorUpdateDelegate?.Invoke();
                    m_updateNodeViewsCallback?.Invoke();
                    node.Dirty(ModificationScope.Graph);
                });

                if (help != null)
                {
                    nodeSettings.Insert(0, help);
                }
            }

            PropertyDrawerUtils.AddDefaultNodeProperties(nodeSettings, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback);

            propertyVisualElement = null;

            return(nodeSettings);
        }
        VisualElement CreateGUI(AbstractMaterialNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement)
        {
            VisualElement nodeSettings = new VisualElement();
            var           nameLabel    = PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold);

            nodeSettings.Add(nameLabel);
            EnumField precisionField = null;

            if (node.canSetPrecision)
            {
                precisionField = new EnumField(node.precision);
                var propertyRow = new PropertyRow(new Label("Precision"));
                propertyRow.Add(precisionField, (field) =>
                {
                    field.RegisterValueChangedCallback(evt =>
                    {
                        if (evt.newValue.Equals(node.precision))
                        {
                            return;
                        }

                        m_setNodesAsDirtyCallback();
                        node.owner.owner.RegisterCompleteObjectUndo("Change precision");
                        node.precision = (Precision)evt.newValue;
                        node.owner.ValidateGraph();
                        m_updateNodeViewsCallback();
                        node.Dirty(ModificationScope.Graph);
                    });
                });
                nodeSettings.Add(propertyRow);
            }
            propertyVisualElement = precisionField;
            return(nodeSettings);
        }
        VisualElement CreateGUI(AbstractMaterialNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement)
        {
            VisualElement nodeSettings = new VisualElement();
            var           nameLabel    = PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold);

            nodeSettings.Add(nameLabel);
            if (node.sgVersion < node.latestVersion)
            {
                string      deprecationText = null;
                string      buttonText      = null;
                string      labelText       = null;
                MessageType messageType     = MessageType.Warning;
                if (node is IHasCustomDeprecationMessage nodeWithCustomDeprecationSettings)
                {
                    nodeWithCustomDeprecationSettings.GetCustomDeprecationMessage(out deprecationText, out buttonText, out labelText, out messageType);
                }

                Action dismissAction = null;
                if (node.dismissedUpdateVersion < node.latestVersion)
                {
                    dismissAction = () =>
                    {   // dismiss
                        m_setNodesAsDirtyCallback?.Invoke();
                        node.owner.owner.RegisterCompleteObjectUndo($"Dismiss {node.name} Node Upgrade Flag");
                        node.dismissedUpdateVersion = node.latestVersion;
                        node.owner.messageManager.ClearNodesFromProvider(node.owner, new AbstractMaterialNode[] { node });
                        node.Dirty(ModificationScope.Graph);
                        inspectorUpdateDelegate?.Invoke();
                        m_updateNodeViewsCallback?.Invoke();
                    };
                }

                var help = HelpBoxRow.TryGetDeprecatedHelpBoxRow($"{node.name} Node",
                                                                 () =>
                {       // upgrade
                    m_setNodesAsDirtyCallback?.Invoke();
                    node.owner.owner.RegisterCompleteObjectUndo($"Update {node.name} Node");
                    node.ChangeVersion(node.latestVersion);
                    node.owner.messageManager.ClearNodesFromProvider(node.owner, new AbstractMaterialNode[] { node });
                    node.Dirty(ModificationScope.Graph);
                    inspectorUpdateDelegate?.Invoke();
                    m_updateNodeViewsCallback?.Invoke();
                },
                                                                 dismissAction, deprecationText, buttonText, labelText, messageType);

                if (help != null)
                {
                    nodeSettings.Insert(0, help);
                }
            }

            PropertyDrawerUtils.AddDefaultNodeProperties(nodeSettings, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback);
            AddCustomNodeProperties(nodeSettings, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback);

            propertyVisualElement = null;

            return(nodeSettings);
        }
예제 #9
0
        internal override void AddCustomNodeProperties(VisualElement parentElement, AbstractMaterialNode nodeBase, Action setNodesAsDirtyCallback, Action updateNodeViewsCallback)
        {
            var node = nodeBase as SampleTexture2DNode;

            PropertyDrawerUtils.AddCustomCheckboxProperty(
                parentElement, nodeBase, setNodesAsDirtyCallback, updateNodeViewsCallback,
                "Use Global Mip Bias", "Change Enable Global Mip Bias",
                () => node.enableGlobalMipBias, (val) => node.enableGlobalMipBias = val);
        }
예제 #10
0
        internal override void AddCustomNodeProperties(VisualElement parentElement, AbstractMaterialNode nodeBase, Action setNodesAsDirtyCallback, Action updateNodeViewsCallback)
        {
            var node = nodeBase as SampleTexture3DNode;

            PropertyDrawerUtils.AddCustomEnumProperty <Texture3DMipSamplingMode>(
                parentElement, nodeBase, setNodesAsDirtyCallback, updateNodeViewsCallback,
                "Mip Sampling Mode", "Change Mip Sampling Mode",
                () => node.mipSamplingMode, (val) => node.mipSamplingMode = val);
        }
        VisualElement CreateGUI(AbstractMaterialNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement)
        {
            VisualElement nodeSettings = new VisualElement();
            var           nameLabel    = PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold);

            nodeSettings.Add(nameLabel);
            if (node.sgVersion < node.latestVersion)
            {
                var help = HelpBoxRow.TryGetDeprecatedHelpBoxRow($"{node.name} Node", () =>
                {
                    m_setNodesAsDirtyCallback?.Invoke();
                    node.owner.owner.RegisterCompleteObjectUndo($"Update {node.name} Node");
                    node.ChangeVersion(node.latestVersion);
                    inspectorUpdateDelegate?.Invoke();
                    m_updateNodeViewsCallback?.Invoke();
                    node.Dirty(ModificationScope.Graph);
                });

                if (help != null)
                {
                    nodeSettings.Insert(0, help);
                }
            }
            EnumField precisionField = null;

            if (node.canSetPrecision)
            {
                precisionField = new EnumField(node.precision);
                var propertyRow = new PropertyRow(new Label("Precision"));
                propertyRow.Add(precisionField, (field) =>
                {
                    field.RegisterValueChangedCallback(evt =>
                    {
                        if (evt.newValue.Equals(node.precision))
                        {
                            return;
                        }

                        m_setNodesAsDirtyCallback();
                        node.owner.owner.RegisterCompleteObjectUndo("Change precision");
                        node.precision = (Precision)evt.newValue;
                        node.owner.ValidateGraph();
                        m_updateNodeViewsCallback();
                        node.Dirty(ModificationScope.Graph);
                    });
                });
                if (node is Serialization.MultiJsonInternal.UnknownNodeType)
                {
                    precisionField.SetEnabled(false);
                }
                nodeSettings.Add(propertyRow);
            }
            propertyVisualElement = precisionField;
            return(nodeSettings);
        }
예제 #12
0
        VisualElement CreateGUI(SubGraphOutputNode node, InspectableAttribute attribute,
                                out VisualElement propertyVisualElement)
        {
            var propertySheet = new PropertySheet(PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold));
            var inputListView = new ReorderableSlotListView(node, SlotType.Input);

            inputListView.OnAddCallback           += list => inspectorUpdateDelegate();
            inputListView.OnRemoveCallback        += list => inspectorUpdateDelegate();
            inputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate();
            propertySheet.Add(inputListView);
            propertyVisualElement = propertySheet;
            return(propertySheet);
        }
        VisualElement CreateGUI(SubGraphOutputNode node, InspectableAttribute attribute,
                                out VisualElement propertyVisualElement)
        {
            var propertySheet = new PropertySheet(PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold));

            PropertyDrawerUtils.AddDefaultNodeProperties(propertySheet, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback);

            var inputListView = new ReorderableSlotListView(node, SlotType.Input, false);

            inputListView.OnAddCallback           += list => inspectorUpdateDelegate();
            inputListView.OnRemoveCallback        += list => inspectorUpdateDelegate();
            inputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate();
            inputListView.AllowedTypeCallback      = SlotValueHelper.AllowedAsSubgraphOutput;
            propertySheet.Add(inputListView);
            propertyVisualElement = propertySheet;
            return(propertySheet);
        }
예제 #14
0
    public override void            OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        var displayName = EditorGUI.BeginProperty(position, label, property);

        {
            if (property.GetIntPtr( ) == IntPtr.Zero || _arrayGUI == null || (_arrayGUI.Source is SerializedPropertyList && !SerializedProperty.EqualContents(((SerializedPropertyList)_arrayGUI.Source).Property, property)))
            {
                Type type;
                PropertyDrawerUtils.GetFieldInfoFromProperty(property, out type);
                type = type.IsArray ? type.GetElementType( ) : type.GetGenericArguments()[0];

                GetType( ).GetMethod("MakeArrayGUI", BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(type).Invoke(this, new object[] { property, displayName.text });
            }

            property.isExpanded = _arrayGUI.OnInspectorGUI(property.isExpanded, position);
        }
        EditorGUI.EndProperty( );
    }
예제 #15
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            IEnumerable <string> fieldToDraw,
            string labelName,
            out VisualElement textArrayField,
            int indentLevel = 0)
        {
            var propertyRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            textArrayField = new PopupField <string>(fieldToDraw.ToList(), 0);
            propertyRow.Add(textArrayField);
            var popupField = (PopupField <string>)textArrayField;

            popupField.RegisterValueChangedCallback(evt =>
            {
                valueChangedCallback(popupField.index);
            });
            propertyRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));

            return(propertyRow);
        }
예제 #16
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Vector4 fieldToDraw,
            string labelName,
            out VisualElement propertyVec4Field,
            int indentLevel = 0)
        {
            var vector4Field = new Vector4Field {
                value = fieldToDraw
            };

            var inputFields = vector4Field.Query("unity-text-input").ToList();

            foreach (var inputField in inputFields)
            {
                inputField.RegisterCallback <KeyDownEvent>(m_KeyDownCallback);
                inputField.RegisterCallback <FocusOutEvent>(m_FocusOutCallback);
            }

            vector4Field.RegisterValueChangedCallback(evt =>
            {
                // Only true when setting value via FieldMouseDragger
                // Undo recorded once per dragger release
                if (mUndoGroup == -1)
                {
                    preValueChangeCallback?.Invoke();
                }

                valueChangedCallback(evt.newValue);
                postValueChangeCallback?.Invoke();
            });

            propertyVec4Field = vector4Field;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyVec4Field);
            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
예제 #17
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Color fieldToDraw,
            string labelName,
            out VisualElement propertyColorField,
            int indentLevel = 0)
        {
            var colorField = new ColorField {
                value = fieldToDraw, showEyeDropper = false, hdr = false
            };

            if (valueChangedCallback != null)
            {
                colorField.RegisterValueChangedCallback(evt => { valueChangedCallback((Color)evt.newValue); });
            }

            propertyColorField = colorField;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyColorField);
            return(defaultRow);
        }
예제 #18
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Enum fieldToDraw,
            string labelName,
            Enum defaultValue,
            out VisualElement propertyVisualElement,
            int indentLevel = 0)
        {
            var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            propertyVisualElement = new EnumField(defaultValue);
            row.Add((EnumField)propertyVisualElement, (field) =>
            {
                field.value = fieldToDraw;
            });

            if (valueChangedCallback != null)
            {
                var enumField = (EnumField)propertyVisualElement;
                enumField.RegisterValueChangedCallback(evt => valueChangedCallback(evt.newValue));
            }

            return(row);
        }
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Texture2DArray fieldToDraw,
            string labelName,
            out VisualElement propertyColorField,
            int indentLevel = 0)
        {
            var objectField = new ObjectField {
                value = fieldToDraw, objectType = typeof(Texture2DArray)
            };

            if (valueChangedCallback != null)
            {
                objectField.RegisterValueChangedCallback(evt => { valueChangedCallback((Texture2DArray)evt.newValue); });
            }

            propertyColorField = objectField;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyColorField);
            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }