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