Exemple #1
0
    void OnGUI()
    {
        Event e = Event.current;

        mousePos = e.mousePosition;

        DrawBackground();

        if (data.n == null)
        {
            data.n = new List <BaseNode>();
            Vector2     pos = new Vector2(10, position.height / 2 - 30);
            MessageNode o   = ScriptableObject.CreateInstance <MessageNode>();
            o.init(pos, 180, "START");
            AssetDatabase.AddObjectToAsset(o, data);
            //AssetDatabase.CreateAsset(o, path + o.id + ".asset");
        }

        switch (e.button)
        {
        case 0:
        {
            if (e.type == EventType.MouseDown && makeTransitionMode)
            {
                if (GetWinClicked())
                {
                    if (!data.n[selectedIndex].Equals(selectedIndex))
                    {
                        BaseNode n = data.n[selectedIndex];
                        n.SetInput((BaseNode)selectedNode, mousePos);
                        if (GetWinClicked() && n.rootNode != null)
                        {
                            n.rootNode.SetAttributeNode(lastTRect, (BaseNode)n);
                        }
                        makeTransitionMode = false;
                        selectedNode       = null;
                    }
                }
                else
                {
                    makeTransitionMode = false;
                    selectedNode       = null;
                }

                e.Use();
            }
        }
        break;

        case 1:
        {
            if (e.type == EventType.MouseDown && !makeTransitionMode)
            {
                GenericMenu menu = new GenericMenu();
                if (!GetWinClicked())
                {
                    menu.AddItem(new GUIContent("Main Menu"), false, ContextCallback, "mainmenuNode");
                    menu.AddItem(new GUIContent("Single Player"), false, ContextCallback, "singleplayerNode");
                    menu.AddItem(new GUIContent("Quit Confirm"), false, ContextCallback, "quitconfirmNode");
                }
                else
                {
                    selectedNode = data.n[selectedIndex];
                    lastTRect    = selectedNode.ClickedOnRect(new Vector2(mousePos.x, mousePos.y));

                    if (lastTRect != selectedNode.winRect || selectedNode.type == BaseNode.nodeType.Message)
                    {
                        menu.AddItem(new GUIContent("Make Transition"), false, ContextCallback, "makeTransition");
                    }
                    if (selectedIndex != 0)
                    {
                        menu.AddItem(new GUIContent("Delete Node"), false, ContextCallback, "deleteNode");
                    }
                }

                menu.ShowAsContext();
                e.Use();
            }
        }
        break;

        case 2:
        {
            if (e.type == EventType.mouseDown)
            {
                initMousePos = e.mousePosition;
            }
            else if (e.type == EventType.mouseDrag)
            {
                Vector2 deltaMousePos = e.mousePosition - initMousePos;
                for (int i = 0; i < data.n.Count; i++)
                {
                    if (data.n[i] != null)
                    {
                        data.n[i].winRect.x += deltaMousePos.x;
                        data.n[i].winRect.y += deltaMousePos.y;
                    }
                }
                initMousePos = e.mousePosition;
                Repaint();
            }
        }
        break;
        }

        if (selectedNode != null && makeTransitionMode)
        {
            Rect mouseRect = new Rect(e.mousePosition.x, e.mousePosition.y, 10, 10);
            DrawNodeCurve(lastTRect, mouseRect, connectionColors[0]);
        }

        BeginWindows();
        for (int i = 0; i < data.n.Count; i++)
        {
            BaseNode w = data.n[i];
            if (w != null)
            {
                string title = (w.type == BaseNode.nodeType.Message) ? "" : w.winTitle;
                data.n[i].winRect = GUI.Window(i, w.winRect, DrawNodeWindow, title);
            }
        }
        EndWindows();

        foreach (BaseNode n in data.n)
        {
            if (n != null)
            {
                n.DrawCurves();
            }
        }
        Repaint();
    }