| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | using System;using System.Collections;using System.Collections.Generic;using UnityEditor;using UnityEngine;using XNode;namespace XNodeEditor {    [CustomEditor(typeof(SceneGraph), true)]    public class SceneGraphEditor : Editor {        private SceneGraph sceneGraph;        private bool removeSafely;        private Type graphType;        public override void OnInspectorGUI() {            if (sceneGraph.graph == null) {                if (GUILayout.Button("New graph", GUILayout.Height(40))) {                    if (graphType == null) {                        Type[] graphTypes = NodeEditorReflection.GetDerivedTypes(typeof(NodeGraph));                        GenericMenu menu = new GenericMenu();                        for (int i = 0; i < graphTypes.Length; i++) {                            Type graphType = graphTypes[i];                            menu.AddItem(new GUIContent(graphType.Name), false, () => CreateGraph(graphType));                        }                        menu.ShowAsContext();                    } else {                        CreateGraph(graphType);                    }                }            } else {                if (GUILayout.Button("Open graph", GUILayout.Height(40))) {                    NodeEditorWindow.Open(sceneGraph.graph);                }                if (removeSafely) {                    GUILayout.BeginHorizontal();                    GUILayout.Label("Really remove graph?");                    GUI.color = new Color(1, 0.8f, 0.8f);                    if (GUILayout.Button("Remove")) {                        removeSafely = false;                        Undo.RecordObject(sceneGraph, "Removed graph");                        sceneGraph.graph = null;                    }                    GUI.color = Color.white;                    if (GUILayout.Button("Cancel")) {                        removeSafely = false;                    }                    GUILayout.EndHorizontal();                } else {                    GUI.color = new Color(1, 0.8f, 0.8f);                    if (GUILayout.Button("Remove graph")) {                        removeSafely = true;                    }                    GUI.color = Color.white;                }            }        }        private void OnEnable() {            sceneGraph = target as SceneGraph;            Type sceneGraphType = sceneGraph.GetType();            if (sceneGraphType == typeof(SceneGraph)) {                graphType = null;            } else {                Type baseType = sceneGraphType.BaseType;                if (baseType.IsGenericType) {                    graphType = sceneGraphType = baseType.GetGenericArguments() [0];                }            }        }        public void CreateGraph(Type type) {            Undo.RecordObject(sceneGraph, "Create graph");            sceneGraph.graph = ScriptableObject.CreateInstance(type) as NodeGraph;            sceneGraph.graph.name = sceneGraph.name + "-graph";        }    }}
 |