| 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";
 
-         }
 
-     }
 
- }
 
 
  |