123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.UIElements;
- using UnityEditor.UIElements;
- namespace GraphProcessor
- {
- [CustomPropertyDrawer(typeof(ExposedParameter))]
- public class ExposedParameterDrawer : PropertyDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- // Create property container element.
- var container = new VisualElement();
- container.Add(CreateValProperty(property));
- return container;
- }
- protected VisualElement CreateValProperty(SerializedProperty property, string displayName = null)
- {
- if (displayName == null)
- displayName = GetNameProperty(property).stringValue;
- var p = new PropertyField(GetValProperty(property), displayName);
- p.RegisterValueChangeCallback(e => {
- ApplyModifiedProperties(property);
- });
- return p;
- }
- protected SerializedProperty GetSettingsProperty(SerializedProperty property) => property.FindPropertyRelative(nameof(ExposedParameter.settings));
- protected SerializedProperty GetValProperty(SerializedProperty property) => property.FindPropertyRelative("val");
- protected SerializedProperty GetNameProperty(SerializedProperty property) => property.FindPropertyRelative(nameof(ExposedParameter.name));
- protected void ApplyModifiedProperties(SerializedProperty property)
- {
- property.serializedObject.ApplyModifiedProperties();
- property.serializedObject.Update();
- }
- }
- [CustomPropertyDrawer(typeof(FloatParameter))]
- public class FloatParameterDrawer : ExposedParameterDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- var container = new VisualElement();
- var val = GetValProperty(property);
- var name = GetNameProperty(property);
- var settings = GetSettingsProperty(property);
- var mode = settings.FindPropertyRelative(nameof(FloatParameter.FloatSettings.mode));
- var min = settings.FindPropertyRelative(nameof(FloatParameter.FloatSettings.min));
- var max = settings.FindPropertyRelative(nameof(FloatParameter.FloatSettings.max));
- container.Add(new IMGUIContainer(() => {
- float newValue;
- EditorGUIUtility.labelWidth = 150;
- if ((FloatParameter.FloatMode)mode.intValue == FloatParameter.FloatMode.Slider)
- {
- newValue = EditorGUILayout.Slider(name.stringValue, val.floatValue, min.floatValue, max.floatValue);
- newValue = Mathf.Clamp(newValue, min.floatValue, max.floatValue);
- }
- else
- newValue = EditorGUILayout.FloatField(name.stringValue, val.floatValue);
- if (newValue != val.floatValue)
- {
- val.floatValue = newValue;
- ApplyModifiedProperties(property);
- }
- EditorGUIUtility.labelWidth = 0;
- }));
- return container;
- }
- }
- [CustomPropertyDrawer(typeof(IntParameter))]
- public class IntParameterDrawer : ExposedParameterDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- var container = new VisualElement();
- var val = GetValProperty(property);
- var name = GetNameProperty(property);
- var settings = GetSettingsProperty(property);
- var mode = settings.FindPropertyRelative(nameof(IntParameter.IntSettings.mode));
- var min = settings.FindPropertyRelative(nameof(IntParameter.IntSettings.min));
- var max = settings.FindPropertyRelative(nameof(IntParameter.IntSettings.max));
- container.Add(new IMGUIContainer(() => {
- int newValue;
- EditorGUIUtility.labelWidth = 150;
- if ((IntParameter.IntMode)mode.intValue == IntParameter.IntMode.Slider)
- {
- newValue = EditorGUILayout.IntSlider(name.stringValue, val.intValue, min.intValue, max.intValue);
- newValue = Mathf.Clamp(newValue, min.intValue, max.intValue);
- }
- else
- newValue = EditorGUILayout.IntField(name.stringValue, val.intValue);
- if (newValue != val.intValue)
- {
- val.intValue = newValue;
- ApplyModifiedProperties(property);
- }
- EditorGUIUtility.labelWidth = 0;
- }));
- return container;
- }
- }
- [CustomPropertyDrawer(typeof(Vector2Parameter))]
- public class Vector2ParameterDrawer : ExposedParameterDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- var container = new VisualElement();
- var val = GetValProperty(property);
- var name = GetNameProperty(property);
- var settings = GetSettingsProperty(property);
- var mode = settings.FindPropertyRelative(nameof(Vector2Parameter.Vector2Settings.mode));
- var min = settings.FindPropertyRelative(nameof(Vector2Parameter.Vector2Settings.min));
- var max = settings.FindPropertyRelative(nameof(Vector2Parameter.Vector2Settings.max));
- container.Add(new IMGUIContainer(() => {
- EditorGUIUtility.labelWidth = 150;
- EditorGUI.BeginChangeCheck();
- if ((Vector2Parameter.Vector2Mode)mode.intValue == Vector2Parameter.Vector2Mode.MinMaxSlider)
- {
- float x = val.vector2Value.x;
- float y = val.vector2Value.y;
- EditorGUILayout.MinMaxSlider(name.stringValue, ref x, ref y, min.floatValue, max.floatValue);
- val.vector2Value = new Vector2(x, y);
- }
- else
- val.vector2Value = EditorGUILayout.Vector2Field(name.stringValue, val.vector2Value);
- if (EditorGUI.EndChangeCheck())
- ApplyModifiedProperties(property);
- EditorGUIUtility.labelWidth = 0;
- }));
- return container;
- }
- }
- [CustomPropertyDrawer(typeof(GradientParameter))]
- public class GradientParameterDrawer : ExposedParameterDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- var name = GetNameProperty(property);
- var settings = GetSettingsProperty(property);
- var mode = (GradientParameter.GradientColorMode)settings.FindPropertyRelative(nameof(GradientParameter.GradientSettings.mode)).intValue;
- if (mode == GradientParameter.GradientColorMode.HDR)
- return new PropertyField(property.FindPropertyRelative("hdrVal"), name.stringValue);
- else
- return new PropertyField(property.FindPropertyRelative("val"), name.stringValue);
- }
- }
- [CustomPropertyDrawer(typeof(ColorParameter))]
- public class ColorParameterDrawer : ExposedParameterDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- var name = GetNameProperty(property);
- var settings = GetSettingsProperty(property);
- var val = GetValProperty(property);
- var mode = (ColorParameter.ColorMode)settings.FindPropertyRelative(nameof(ColorParameter.ColorSettings.mode)).intValue;
- var colorField = new ColorField(name.stringValue) { value = val.colorValue, hdr = mode == ColorParameter.ColorMode.HDR };
- colorField.RegisterValueChangedCallback(e => {
- val.colorValue = e.newValue;
- ApplyModifiedProperties(property);
- });
- return colorField;
- }
- }
- [CustomPropertyDrawer(typeof(ExposedParameter.Settings))]
- public class ExposedParameterSettingsDrawer : PropertyDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty property)
- {
- return CreateHideInInspectorField(property);
- }
- protected VisualElement CreateHideInInspectorField(SerializedProperty settingsProperty)
- {
- var isHidden = settingsProperty.FindPropertyRelative(nameof(ExposedParameter.Settings.isHidden));
- var graph = GetGraph(settingsProperty);
- var param = GetParameter(settingsProperty);
- var p = new PropertyField(isHidden, "Hide in Inspector");
- p.RegisterValueChangeCallback(e => {
- settingsProperty.serializedObject.ApplyModifiedProperties();
- graph.NotifyExposedParameterChanged(param);
- });
- return p;
- }
- protected static BaseGraph GetGraph(SerializedProperty property) => property.serializedObject.FindProperty("graph").objectReferenceValue as BaseGraph;
- protected static ExposedParameter GetParameter(SerializedProperty settingsProperty)
- {
- var guid = settingsProperty.FindPropertyRelative(nameof(ExposedParameter.Settings.guid)).stringValue;
- return GetGraph(settingsProperty).GetExposedParameterFromGUID(guid);
- }
- protected static PropertyField CreateSettingsField(SerializedProperty settingsProperty, string fieldName, string displayName = null)
- {
- var prop = settingsProperty.FindPropertyRelative(fieldName);
- var param = GetParameter(settingsProperty);
- var graph = GetGraph(settingsProperty);
- if (displayName == null)
- displayName = ObjectNames.NicifyVariableName(fieldName);
- var p = new PropertyField(prop, displayName);
- p.Bind(settingsProperty.serializedObject);
- p.RegisterValueChangeCallback(e => {
- settingsProperty.serializedObject.ApplyModifiedProperties();
- graph.NotifyExposedParameterChanged(param);
- });
- return p;
- }
- }
- [CustomPropertyDrawer(typeof(ColorParameter.ColorSettings))]
- public class ExposedColorSettingsDrawer : ExposedParameterSettingsDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty settingsProperty)
- {
- VisualElement settings = new VisualElement();
- settings.Add(CreateHideInInspectorField(settingsProperty));
- settings.Add(CreateSettingsField(settingsProperty, nameof(ColorParameter.ColorSettings.mode), "Mode"));
- return settings;
- }
- }
- [CustomPropertyDrawer(typeof(FloatParameter.FloatSettings))]
- public class FloatSettingsDrawer : ExposedParameterSettingsDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty settingsProperty)
- {
- VisualElement settings = new VisualElement();
- settings.Bind(settingsProperty.serializedObject);
- settings.Add(CreateHideInInspectorField(settingsProperty));
- var mode = CreateSettingsField(settingsProperty, nameof(FloatParameter.FloatSettings.mode), "Mode");
- var min = CreateSettingsField(settingsProperty, nameof(FloatParameter.FloatSettings.min), "Min");
- var max = CreateSettingsField(settingsProperty, nameof(FloatParameter.FloatSettings.max), "Max");
- mode.RegisterValueChangeCallback(e => UpdateVisibility(e.changedProperty));
- UpdateVisibility(settingsProperty.FindPropertyRelative(nameof(FloatParameter.FloatSettings.mode)));
- void UpdateVisibility(SerializedProperty property)
- {
- if (property == null)
- return;
- var newValue = (FloatParameter.FloatMode)property.intValue;
- if (newValue == FloatParameter.FloatMode.Slider)
- min.style.display = max.style.display = DisplayStyle.Flex;
- else
- min.style.display = max.style.display = DisplayStyle.None;
- }
- settings.Add(mode);
- settings.Add(min);
- settings.Add(max);
- return settings;
- }
- }
- [CustomPropertyDrawer(typeof(IntParameter.IntSettings))]
- public class IntSettingsDrawer : ExposedParameterSettingsDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty settingsProperty)
- {
- VisualElement settings = new VisualElement();
- settings.Bind(settingsProperty.serializedObject);
- settings.Add(CreateHideInInspectorField(settingsProperty));
- var mode = CreateSettingsField(settingsProperty, nameof(IntParameter.IntSettings.mode), "Mode");
- var min = CreateSettingsField(settingsProperty, nameof(IntParameter.IntSettings.min), "Min");
- var max = CreateSettingsField(settingsProperty, nameof(IntParameter.IntSettings.max), "Max");
- mode.RegisterValueChangeCallback(e => UpdateVisibility(e.changedProperty));
- UpdateVisibility(settingsProperty.FindPropertyRelative(nameof(IntParameter.IntSettings.mode)));
- void UpdateVisibility(SerializedProperty property)
- {
- if (property == null)
- return;
- var newValue = (IntParameter.IntMode)property.intValue;
- if (newValue == IntParameter.IntMode.Slider)
- min.style.display = max.style.display = DisplayStyle.Flex;
- else
- min.style.display = max.style.display = DisplayStyle.None;
- }
- settings.Add(mode);
- settings.Add(min);
- settings.Add(max);
- return settings;
- }
- }
- [CustomPropertyDrawer(typeof(Vector2Parameter.Vector2Settings))]
- public class Vector2SettingsDrawer : ExposedParameterSettingsDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty settingsProperty)
- {
- VisualElement settings = new VisualElement();
- settings.Add(CreateHideInInspectorField(settingsProperty));
- settings.Add(CreateSettingsField(settingsProperty, nameof(Vector2Parameter.Vector2Settings.mode), "Mode"));
- settings.Add(CreateSettingsField(settingsProperty, nameof(Vector2Parameter.Vector2Settings.min), "Min"));
- settings.Add(CreateSettingsField(settingsProperty, nameof(Vector2Parameter.Vector2Settings.max), "Max"));
- return settings;
- }
- }
- [CustomPropertyDrawer(typeof(GradientParameter.GradientSettings))]
- public class GradientSettingsDrawer : ExposedParameterSettingsDrawer
- {
- public override VisualElement CreatePropertyGUI(SerializedProperty settingsProperty)
- {
- VisualElement settings = new VisualElement();
- settings.Add(CreateHideInInspectorField(settingsProperty));
- settings.Add(CreateSettingsField(settingsProperty, nameof(GradientParameter.GradientSettings.mode), "Mode"));
- return settings;
- }
- }
- }
|