public DielectricSpecularControlView(AbstractMaterialNode node, PropertyInfo propertyInfo)
        {
            m_Node         = node;
            m_PropertyInfo = propertyInfo;

            styleSheets.Add(Resources.Load <StyleSheet>("Styles/Controls/DielectricSpecularControlView"));
            m_DielectricMaterial = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);

            if (propertyInfo.PropertyType != typeof(DielectricSpecularNode.DielectricMaterial))
            {
                throw new ArgumentException("Property must be of type DielectricMaterial.", "propertyInfo");
            }

            var enumPanel = new VisualElement {
                name = "enumPanel"
            };

            enumPanel.Add(new Label("Material"));
            var enumField = new EnumField(m_DielectricMaterial.type);

            enumField.RegisterValueChangedCallback(OnEnumChanged);
            enumPanel.Add(enumField);
            Add(enumPanel);

            m_RangePanel = new VisualElement {
                name = "sliderPanel"
            };
            m_RangePanel.Add(new Label("Range"));
            m_RangeSlider = new Slider(0.01f, 1)
            {
                value = m_DielectricMaterial.range
            };
            m_RangeSlider.RegisterValueChangedCallback((evt) => OnChangeRangeSlider(evt.newValue));

            m_RangePanel.Add(m_RangeSlider);
            m_RangeField = AddField(m_RangePanel, m_RangeSlider, 0, m_DielectricMaterial);
            m_RangePanel.SetEnabled(m_DielectricMaterial.type == DielectricMaterialType.Common);
            Add(m_RangePanel);

            m_IORPanel = new VisualElement {
                name = "sliderPanel"
            };
            m_IORPanel.Add(new Label("IOR"));
            m_IORSlider = new Slider(1, 2.5f)
            {
                value = m_DielectricMaterial.indexOfRefraction
            };
            m_IORSlider.RegisterValueChangedCallback((evt) => OnChangeIORSlider(evt.newValue));

            m_IORPanel.Add(m_IORSlider);
            m_IORField = AddField(m_IORPanel, m_IORSlider, 1, m_DielectricMaterial);
            m_IORPanel.SetEnabled(m_DielectricMaterial.type == DielectricMaterialType.Custom);
            Add(m_IORPanel);
        }
Ejemplo n.º 2
0
        public DielectricSpecularControlView(AbstractMaterialNode node, PropertyInfo propertyInfo)
        {
            m_Node         = node;
            m_PropertyInfo = propertyInfo;

            AddStyleSheetPath("Styles/Controls/DielectricSpecularControlView");
            m_DielectricMaterial = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);

            if (propertyInfo.PropertyType != typeof(DielectricSpecularNode.DielectricMaterial))
            {
                throw new ArgumentException("Property must be of type DielectricMaterial.", "propertyInfo");
            }

            var enumPanel = new VisualElement {
                name = "enumPanel"
            };

            enumPanel.Add(new Label("Material"));
            var enumField = new EnumField(m_DielectricMaterial.type);

            enumField.OnValueChanged(OnEnumChanged);
            enumPanel.Add(enumField);
            Add(enumPanel);

            m_RangePanel = new VisualElement {
                name = "sliderPanel"
            };
            m_RangePanel.Add(new Label("Range"));
            Action <float> changedRangeSlider = (s) => { OnChangeRangeSlider(s); };

            m_RangeSlider       = new Slider(0.01f, 1, changedRangeSlider);
            m_RangeSlider.value = 0.5f;
            m_RangePanel.Add(m_RangeSlider);
            m_RangeField = AddField(m_RangePanel, m_RangeSlider, 0, m_DielectricMaterial);
            m_RangePanel.SetEnabled(true);
            Add(m_RangePanel);

            m_IORPanel = new VisualElement {
                name = "sliderPanel"
            };
            m_IORPanel.Add(new Label("IOR"));
            Action <float> changedIORSlider = (s) => { OnChangeIORSlider(s); };

            m_IORSlider       = new Slider(1, 5, changedIORSlider);
            m_IORSlider.value = 1;
            m_IORPanel.Add(m_IORSlider);
            m_IORField = AddField(m_IORPanel, m_IORSlider, 1, m_DielectricMaterial);
            m_IORPanel.SetEnabled(false);
            Add(m_IORPanel);
        }
        FloatField AddField(VisualElement panel, Slider slider, int index, DielectricSpecularNode.DielectricMaterial initMaterial)
        {
            float initValue;

            if (index == 1)
            {
                initValue = initMaterial.indexOfRefraction;
            }
            else
            {
                initValue = initMaterial.range;
            }

            var field = new FloatField {
                userData = index, value = initValue
            };

            field.RegisterCallback <MouseDownEvent>(Repaint);
            field.RegisterCallback <MouseMoveEvent>(Repaint);
            field.RegisterValueChangedCallback(evt =>
            {
                var fieldValue = (float)evt.newValue;
                if (index == 1)
                {
                    m_DielectricMaterial.indexOfRefraction = fieldValue;
                }
                else
                {
                    m_DielectricMaterial.range = fieldValue;
                }

                m_PropertyInfo.SetValue(m_Node, m_DielectricMaterial, null);
                this.MarkDirtyRepaint();
            });
            field.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt =>
            {
                if (index == 1)
                {
                    RedrawIORControls(m_DielectricMaterial.indexOfRefraction);
                }
                else
                {
                    RedrawRangeControls(m_DielectricMaterial.range);
                }

                this.MarkDirtyRepaint();
            });
            panel.Add(field);
            return(field);
        }
Ejemplo n.º 4
0
        FloatField AddField(VisualElement panel, Slider slider, int index, DielectricSpecularNode.DielectricMaterial initMaterial)
        {
            float initValue;

            if (index == 1)
            {
                initValue = initMaterial.indexOfRefraction;
            }
            else
            {
                initValue = initMaterial.range;
            }

            var field = new FloatField {
                userData = index, value = initValue
            };

            field.RegisterCallback <MouseDownEvent>(Repaint);
            field.RegisterCallback <MouseMoveEvent>(Repaint);
            field.OnValueChanged(evt =>
            {
                var value      = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);
                var fieldValue = (float)evt.newValue;
                if (index == 1)
                {
                    value.indexOfRefraction = fieldValue;
                    RedrawIORControls(fieldValue);
                }
                else
                {
                    value.range = fieldValue;
                    RedrawRangeControls(fieldValue);
                }
                m_PropertyInfo.SetValue(m_Node, value, null);
                m_UndoGroup = -1;
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <InputEvent>(evt =>
            {
                if (m_UndoGroup == -1)
                {
                    m_UndoGroup = Undo.GetCurrentGroup();
                    m_Node.owner.owner.RegisterCompleteObjectUndo("Change " + m_Node.name);
                }
                float newValue;
                if (!float.TryParse(evt.newData, out newValue))
                {
                    newValue = 0f;
                }
                var value = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);
                if (index == 1)
                {
                    value.indexOfRefraction = newValue;
                }
                else
                {
                    value.range = newValue;
                }
                m_PropertyInfo.SetValue(m_Node, value, null);
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <KeyDownEvent>(evt =>
            {
                if (evt.keyCode == KeyCode.Escape && m_UndoGroup > -1)
                {
                    Undo.RevertAllDownToGroup(m_UndoGroup);
                    m_UndoGroup = -1;
                    var value   = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);
                    if (index == 1)
                    {
                        RedrawIORControls(value.indexOfRefraction);
                    }
                    else
                    {
                        RedrawRangeControls(value.range);
                    }
                    evt.StopPropagation();
                }
                this.MarkDirtyRepaint();
            });
            panel.Add(field);
            return(field);
        }