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); }
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); }
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); }