using UnityEditor; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; namespace NanoBrain { [CustomEditor(typeof(Brain))] public class Brain_Editor : Editor { protected static VisualElement mainContainer; protected static VisualElement inspectorContainer; public Brain component; private SerializedProperty brainProp; public void OnEnable() { component = target as Brain; if (Application.isPlaying == false && serializedObject != null) { string propertyName = nameof(Brain.brainPrefab); brainProp = serializedObject.FindProperty(propertyName); } } public override VisualElement CreateInspectorGUI() { if (Application.isPlaying == false) serializedObject.Update(); VisualElement root = new() { style = { paddingLeft = 0, paddingRight = 0, paddingTop = 0, paddingBottom = 0 } }; root.styleSheets.Add(Resources.Load("GraphStyles")); PropertyField brainField = new(brainProp) { label = "Cluster Prefab" }; root.Add(brainField); CreateViewer(root, component.brain, component.gameObject); if (Application.isPlaying == false) serializedObject.ApplyModifiedProperties(); return root; } public ClusterViewer.GraphView CreateViewer(VisualElement root, Cluster cluster, GameObject gameObject) { VisualElement mainContainer = new() { style = { flexDirection = FlexDirection.Row, minHeight = 450 } }; ClusterViewer.GraphView graph = new(cluster); graph.style.flexGrow = 1; mainContainer.Add(graph); root.Add(mainContainer); graph.SetGraph(gameObject); return graph; } } }