예제 #1
0
        private void OnEnable()
        {
            n = (Node)target;
            if (n != null)
            {
                TaskInspector = CreateEditor(n.Task);
                TaskInfo      = MoonReflection.GetNodeData(n.Task.GetType());
            }

            tooltipPosition = serializedObject.FindProperty("tooltipPosition");
            Tooltip         = serializedObject.FindProperty("Tooltip");

            Nodedoc = MoonReflection.GetAttribute(n.Task.GetType(), typeof(HelpURLAttribute), true) as HelpURLAttribute;
        }
예제 #2
0
        /// <summary>
        /// Displays the toolbar menu
        /// </summary>
        public void DoMenu()
        {
            GUILayout.BeginHorizontal(EditorStyles.toolbar);

            if (GUILayout.Button("New", EditorStyles.toolbarDropDown, GUILayout.Width(MenuBtnWidth)))
            {
                System.Type[] foundmodules = MoonReflection.GetAllDerivedTypes(typeof(NodeGraph)).ToArray();

                GenericMenu menu = new GenericMenu();

                for (int i = 0; i < foundmodules.Length; i++)
                {
                    System.Type curr = foundmodules[i];

                    var atr = (GraphModuleAttribute)MoonReflection.GetAttribute(curr, typeof(GraphModuleAttribute), true);

                    if (atr != null)
                    {
                        atr.Init(curr);
                        menu.AddItem(new GUIContent(atr.Name), false, OnNewGraph, atr);
                    }
                }

                menu.DropDown(new Rect(5, 15, 0, 0));
            }

            if (GUILayout.Button("Open", EditorStyles.toolbarButton, GUILayout.Width(MenuBtnWidth)))
            {
                canvas.HideAddNode();
                CurrentGUIState = (int)GUIState.Open;
                FoundGraphs     = MoonIO.GetAllGraphs();
            }

            if (WorkingGraph != null)
            {
                if (GUILayout.Button("Save", EditorStyles.toolbarDropDown, GUILayout.Width(MenuBtnWidth)))
                {
                    GenericMenu men = new GenericMenu();
                    men.AddItem(new GUIContent("Save"), false, new GenericMenu.MenuFunction(() =>
                    {
                        AssetDatabase.SaveAssets();
                        AssetDatabase.Refresh();
                    }));

                    men.AddItem(new GUIContent("Save as..."), false, new GenericMenu.MenuFunction(() =>
                    {
                        CurrentGUIState = (int)GUIState.SaveAs;
                    }));

                    float x = (MenuBtnWidth * 2) + 5;
                    men.DropDown(new Rect(x, 15, 0, 0));
                }

                DoZoomArea();
                GUILayout.Space(5);
                WorkingGraph.OnMenuGUI();
            }

            GUILayout.FlexibleSpace();

            if (WorkingGraph != null)
            {
                WorkingGraph.OnToolBarGUI();
            }
            else
            {
                GUILayout.FlexibleSpace();
            }

            GUILayout.EndHorizontal();
        }
예제 #3
0
        /// <summary>
        /// Displays open graph panel
        /// </summary>
        /// <param name="scrollpoint">Open graph scroll point</param>
        /// <param name="searchfilter">Open graph search filter</param>
        /// <param name="Graphs">Graphs list</param>
        /// <param name="OnOpen">On open action</param>
        /// <param name="OnCancel">On cancel action</param>
        /// <param name="OnDelete">On delete action</param>
        public static void OpenGraphPanel(ref Vector2 scrollpoint, ref string searchfilter, NodeGraph[] Graphs,
                                          System.Action <NodeGraph> OnOpen, System.Action OnCancel, System.Action OnDelete)
        {
            Vector2 size = new Vector2(350, 320);

            Rect r = new Rect((Screen.width / 2) - (size.x / 2), (Screen.height / 2) - (size.y / 2), size.x, size.y);

            GUI.Box(r, "", GUI.skin.FindStyle("WindowBackground"));


            GUI.BeginGroup(r);

            GUI.Box(new Rect(0, 0, r.width - 50, 15), "", EditorStyles.toolbar);

            GUI.Label(new Rect(5, 0, 100, 20), "Open Graph");

            if (GUI.Button(new Rect(r.width - 50, 0, 50, 15), "Close", EditorStyles.toolbarButton))
            {
                OnCancel.Invoke();
            }

            Rect searchRect = new Rect(10, 28, r.width - 20, 15);

            searchfilter = MoonGUI.SearchTextField(searchRect, searchfilter);

            //EditorGUI.DrawRect(searchRect, Color.blue);

            Rect ScrollRect = new Rect(5, 50, r.width - 15, r.height - 60);

            GUI.Box(ScrollRect, "", GUI.skin.FindStyle("AnimationKeyframeBackground"));

            scrollpoint = GUI.BeginScrollView(ScrollRect, scrollpoint, new Rect(0, 0, ScrollRect.width - 20, Graphs.Length * 25), false, true);

            if (Graphs != null && Graphs.Length > 0)
            {
                for (int i = 0; i < Graphs.Length; i++)
                {
                    Rect baserect = new Rect(ScrollRect.x, i * 25, ScrollRect.width - 25, 20);

                    NodeGraph current = Graphs[i];

                    if (current != null)
                    {
                        GraphModuleAttribute module = MoonReflection.GetAttribute(current.GetType(), typeof(GraphModuleAttribute), true)
                                                      as GraphModuleAttribute;

                        if (module != null)
                        {
                            GUI.Box(baserect, "");

                            GUI.BeginGroup(baserect);

                            Rect labelrect = new Rect(5, 0, baserect.width * 0.8f, baserect.height);


                            Rect namerect = new Rect(labelrect.x, labelrect.y, labelrect.width * 0.55f, labelrect.height);

                            //EditorGUI.DrawRect(namerect, Color.blue);


                            GUI.Label(namerect, current.name);

                            Rect TypeRect = new Rect(namerect.xMax + 5, labelrect.y, labelrect.width * 0.45f, labelrect.height);

                            GUI.Label(TypeRect, module.Name, GUI.skin.FindStyle("PreToolbar"));

                            //EditorGUI.DrawRect(TypeRect, Color.red);

                            Rect loadrect = new Rect(TypeRect.xMax + 5, TypeRect.y + 2, 15, 15);

                            if (GUI.Button(loadrect, new GUIContent("", "Load"), GUI.skin.FindStyle("OL Plus")))
                            {
                                OnOpen.Invoke(current);
                            }

                            Rect removerect = new Rect(loadrect.xMax + 5, loadrect.y, 15, 15);

                            if (GUI.Button(removerect, new GUIContent("", "Remove"), GUI.skin.FindStyle("OL Minus")))
                            {
                                bool ok = EditorUtility.DisplayDialog("Delete", "Are you sure to DELETE the graph '" + current.name + "' ?",
                                                                      "Yes", "No");

                                if (ok)
                                {
                                    AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(current));
                                    OnDelete.Invoke();
                                }
                            }

                            GUI.EndGroup();
                        }
                    }
                    else
                    {
                        OnDelete.Invoke();
                    }
                }
            }
            GUI.EndScrollView();

            GUI.EndGroup();
        }