| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | using UnityEngine;using UnityEditor;using UnityEditor.UIElements;using UnityEngine.UIElements;using System;using System.Reflection;namespace GraphProcessor{    public class GraphInspector : Editor    {        protected VisualElement root;        protected BaseGraph     graph;        protected ExposedParameterFieldFactory exposedParameterFactory;        VisualElement           parameterContainer;        protected virtual void OnEnable()        {            graph = target as BaseGraph;            graph.onExposedParameterListChanged += UpdateExposedParameters;            graph.onExposedParameterModified += UpdateExposedParameters;            if (exposedParameterFactory == null)                exposedParameterFactory = new ExposedParameterFieldFactory(graph);        }        protected virtual void OnDisable()        {            graph.onExposedParameterListChanged -= UpdateExposedParameters;            graph.onExposedParameterModified -= UpdateExposedParameters;            exposedParameterFactory?.Dispose(); //  Graphs that created in GraphBehaviour sometimes gives null ref.            exposedParameterFactory = null;        }        public sealed override VisualElement CreateInspectorGUI()        {            root = new VisualElement();            CreateInspector();            return root;        }        protected virtual void CreateInspector()        {            parameterContainer = new VisualElement{                name = "ExposedParameters"            };            FillExposedParameters(parameterContainer);            root.Add(parameterContainer);        }        protected void FillExposedParameters(VisualElement parameterContainer)        {            if (graph.exposedParameters.Count != 0)                parameterContainer.Add(new Label("Exposed Parameters:"));            foreach (var param in graph.exposedParameters)            {                if (param.settings.isHidden)                    continue;                var field = exposedParameterFactory.GetParameterValueField(param, (newValue) => {                    param.value = newValue;                    serializedObject.ApplyModifiedProperties();                    graph.NotifyExposedParameterValueChanged(param);                });                parameterContainer.Add(field);            }        }        void UpdateExposedParameters(ExposedParameter param) => UpdateExposedParameters();        void UpdateExposedParameters()        {            parameterContainer.Clear();            FillExposedParameters(parameterContainer);        }        // Don't use ImGUI        public sealed override void OnInspectorGUI() {}    }}
 |