//Bind graph to owner
        void AssetToLocal()
        {
            var newGraph = (Graph)EditorUtils.AddScriptableComponent(owner.gameObject, owner.graphType);

            newGraph.hideFlags = HideFlags.HideInInspector;
            EditorUtility.CopySerialized(owner.graph, newGraph);
            Undo.RegisterCreatedObjectUndo(newGraph, "New Bound Graph");
            Undo.RecordObject(owner, "New Bound Graph");
            owner.graph = newGraph;
            EditorUtility.SetDirty(owner);
            EditorUtility.SetDirty(newGraph);
        }
        //create new local graph and assign it to owner
        Graph NewAsLocal()
        {
            var newGraph = (Graph)EditorUtils.AddScriptableComponent(owner.gameObject, owner.graphType);

            newGraph.name      = owner.graphType.Name;
            newGraph.hideFlags = HideFlags.HideInInspector;
            Undo.RegisterCreatedObjectUndo(newGraph, "New Bound Graph");
            Undo.RecordObject(owner, "New Bound Graph");
            owner.graph = newGraph;
            EditorUtility.SetDirty(owner);
            EditorUtility.SetDirty(newGraph);
            return(newGraph);
        }
Exemplo n.º 3
0
        //This is called outside Begin/End Windows from GraphEditor.
        void ShowToolbar(Event e)
        {
            var owner = this.agent != null && agent is GraphOwner && (agent as GraphOwner).graph == this? (GraphOwner)agent : null;


            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            GUI.backgroundColor = new Color(1f, 1f, 1f, 0.5f);

            ///FILE
            if (GUILayout.Button("File", EditorStyles.toolbarDropDown, GUILayout.Width(50)))
            {
                var menu = new GenericMenu();

#if !UNITY_WEBPLAYER
                //Import JSON
                menu.AddItem(new GUIContent("Import JSON"), false, () =>
                {
                    if (allNodes.Count > 0 && !EditorUtility.DisplayDialog("Import Graph", "All current graph information will be lost. Are you sure?", "YES", "NO"))
                    {
                        return;
                    }

                    var path = EditorUtility.OpenFilePanel(string.Format("Import '{0}' Graph", this.GetType().Name), "Assets", exportFileExtension);
                    if (!string.IsNullOrEmpty(path))
                    {
                        if (this.Deserialize(System.IO.File.ReadAllText(path), true, null) == null)         //true: validate, null: this._objectReferences
                        {
                            EditorUtility.DisplayDialog("Import Failure", "Please read the logs for more information", "OK", "");
                        }
                    }
                });

                //Expot JSON
                menu.AddItem(new GUIContent("Export JSON"), false, () =>
                {
                    var path = EditorUtility.SaveFilePanelInProject(string.Format("Export '{0}' Graph", this.GetType().Name), "", exportFileExtension, "");
                    if (!string.IsNullOrEmpty(path))
                    {
                        System.IO.File.WriteAllText(path, this.Serialize(true, null));       //true: pretyJson, null: this._objectReferences
                        AssetDatabase.Refresh();
                    }
                });
#else
                menu.AddDisabledItem(new GUIContent("Import JSON (not possible with webplayer active platform)"));
                menu.AddDisabledItem(new GUIContent("Export JSON (not possible with webplayer active platform)"));
#endif
                menu.ShowAsContext();
            }

            ///EDIT
            if (GUILayout.Button("Edit", EditorStyles.toolbarDropDown, GUILayout.Width(50)))
            {
                var menu = new GenericMenu();

                //Bind
                if (!Application.isPlaying && owner != null && !owner.graphIsLocal)
                {
                    menu.AddItem(new GUIContent("Bind To Owner"), false, () =>
                    {
                        if (EditorUtility.DisplayDialog("Bind To Owner", "This will create a local copy of the graph binded to the owner.\nIt will allow you to assign direct scene references in the graph.\nContinue?", "YES", "NO"))
                        {
                            var newGraph       = (Graph)EditorUtils.AddScriptableComponent(owner.gameObject, owner.graphType);
                            newGraph.hideFlags = HideFlags.HideInInspector;

                            EditorUtility.CopySerialized(owner.graph, newGraph);
                            newGraph.Validate();

                            Undo.RegisterCreatedObjectUndo(newGraph, "New Local Graph");
                            Undo.RecordObject(owner, "New Local Graph");
                            owner.graph = newGraph;
                            EditorUtility.SetDirty(owner);
                            EditorUtility.SetDirty(newGraph);
                        }
                    });
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Bind To Owner"));
                }

                //Save to asset
                if (owner != null && owner.graphIsLocal)
                {
                    menu.AddItem(new GUIContent("Save To Asset"), false, () =>
                    {
                        var newGraph = (Graph)EditorUtils.CreateAsset(this.GetType(), true);
                        if (newGraph != null)
                        {
                            EditorUtility.CopySerialized(this, newGraph);
                            newGraph.Validate();
                            AssetDatabase.SaveAssets();
                        }
                    });
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Save To Asset"));
                }

                //Create defined vars
                if (blackboard != null)
                {
                    menu.AddItem(new GUIContent("Promote Defined Parameters To Variables"), false, () =>
                    {
                        if (EditorUtility.DisplayDialog("Promote Defined Parameters", "This will fill the current Blackboard with a Variable for each defined Parameter in the graph.\nContinue?", "YES", "NO"))
                        {
                            CreateDefinedParameterVariables(blackboard);
                        }
                    });
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Create Defined Blackboard Variables"));
                }

                menu.ShowAsContext();
            }
            //////


            ///PREFS
            if (GUILayout.Button("Prefs", EditorStyles.toolbarDropDown, GUILayout.Width(50)))
            {
                var menu = new GenericMenu();
                menu.AddItem(new GUIContent("Use Node Browser"), NCPrefs.useBrowser, () => { NCPrefs.useBrowser = !NCPrefs.useBrowser; });
                menu.AddItem(new GUIContent("Show Icons"), NCPrefs.showIcons, () => { NCPrefs.showIcons = !NCPrefs.showIcons; });
                menu.AddItem(new GUIContent("Show Node Help"), NCPrefs.showNodeInfo, () => { NCPrefs.showNodeInfo = !NCPrefs.showNodeInfo; });
                menu.AddItem(new GUIContent("Show Comments"), NCPrefs.showComments, () => { NCPrefs.showComments = !NCPrefs.showComments; });
                menu.AddItem(new GUIContent("Show Summary Info"), NCPrefs.showTaskSummary, () => { NCPrefs.showTaskSummary = !NCPrefs.showTaskSummary; });
                menu.AddItem(new GUIContent("Log Events"), NCPrefs.logEvents, () => { NCPrefs.logEvents = !NCPrefs.logEvents; });
                menu.AddItem(new GUIContent("Grid Snap"), NCPrefs.doSnap, () => { NCPrefs.doSnap = !NCPrefs.doSnap; });
                menu.AddItem(new GUIContent("Breakpoints Pause Editor"), NCPrefs.breakpointPauseEditor, () => { NCPrefs.breakpointPauseEditor = !NCPrefs.breakpointPauseEditor; });
                if (autoSort)
                {
                    menu.AddItem(new GUIContent("Automatic Hierarchical Move"), NCPrefs.hierarchicalMove, () => { NCPrefs.hierarchicalMove = !NCPrefs.hierarchicalMove; });
                }
                menu.AddItem(new GUIContent("Connection Style/Smooth"), NCPrefs.connectionStyle == NCPrefs.ConnectionStyle.Smooth, () => { NCPrefs.connectionStyle = NCPrefs.ConnectionStyle.Smooth; });
                menu.AddItem(new GUIContent("Connection Style/Stepped"), NCPrefs.connectionStyle == NCPrefs.ConnectionStyle.Stepped, () => { NCPrefs.connectionStyle = NCPrefs.ConnectionStyle.Stepped; });
                menu.AddItem(new GUIContent("Connection Style/Straight"), NCPrefs.connectionStyle == NCPrefs.ConnectionStyle.Straight, () => { NCPrefs.connectionStyle = NCPrefs.ConnectionStyle.Straight; });
                //menu.AddItem (new GUIContent ("Use External Inspector"), NCPrefs.useExternalInspector, ()=> {NCPrefs.useExternalInspector = !NCPrefs.useExternalInspector;});
                menu.AddItem(new GUIContent("Open Preferred Types Editor..."), false, () => { PreferedTypesEditorWindow.ShowWindow(); });
                menu.ShowAsContext();
            }
            /////////

            GUILayout.Space(10);

            ////CLICK SELECT
            if (agent != null && GUILayout.Button("Select Owner", EditorStyles.toolbarButton, GUILayout.Width(80)))
            {
                Selection.activeObject = agent;
                EditorGUIUtility.PingObject(agent);
            }

            if (EditorUtility.IsPersistent(this) && GUILayout.Button("Select Graph", EditorStyles.toolbarButton, GUILayout.Width(80)))
            {
                Selection.activeObject = this;
                EditorGUIUtility.PingObject(this);
            }
            ////////////////

            GUILayout.Space(10);
            GUILayout.FlexibleSpace();

            //DROPDOWN GRAPHOWNER JUMP SELECTION
            if (owner != null && !NCPrefs.isLocked)
            {
                if (GUILayout.Button(string.Format("[{0}]", owner.gameObject.name), EditorStyles.toolbarDropDown, GUILayout.Width(120)))
                {
                    var menu = new GenericMenu();
                    foreach (var _o in FindObjectsOfType <GraphOwner>())
                    {
                        var o = _o;
                        menu.AddItem(new GUIContent(o.GetType().Name + "s/" + o.gameObject.name), false, () => { Selection.activeObject = o; Selection.selectionChanged(); });
                    }
                    menu.ShowAsContext();
                }
            }
            ////////////////////////////////////

            NCPrefs.isLocked = GUILayout.Toggle(NCPrefs.isLocked, "Lock", EditorStyles.toolbarButton);
            GUILayout.Space(2);

            GUI.backgroundColor = new Color(1, 0.8f, 0.8f, 1);
            if (GUILayout.Button("Clear", EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                if (EditorUtility.DisplayDialog("Clear Canvas", "This will delete all nodes of the currently viewing graph!\nAre you sure?", "YES", "NO!"))
                {
                    ClearGraph();
                    e.Use();
                    return;
                }
            }

            GUILayout.EndHorizontal();
            GUI.backgroundColor = Color.white;
        }
Exemplo n.º 4
0
        public static void Editor_CreateGraph()
        {
            var newGraph = EditorUtils.AddScriptableComponent <DialogueTree>(new GameObject("DialogueTree"));

            UnityEditor.Selection.activeObject = newGraph;
        }