Beispiel #1
0
    void OnGUI()
    {
        //scrollPos = EditorGUILayout.BeginScrollView(scrollPos,true, true);
        if (editor == null)
        {
            editor = EditorWindow.GetWindow <NodeEditor>();
        }
        Event e = Event.current;

        mousePos = e.mousePosition;
        if (e.button == 1 && !makeTransitionMode)
        {
            if (e.type == EventType.MouseDown)
            {
                bool     clickedOnWindow  = false;
                BaseNode tempSelectedNode = null;

                foreach (BaseNode node in nodes)
                {
                    if (node.windowRect.Contains(mousePos))
                    {
                        tempSelectedNode = node;
                        clickedOnWindow  = true;
                        break;
                    }
                }
                if (!clickedOnWindow)
                {
                    GenericMenu menu = new GenericMenu();
                    menu.AddItem(new GUIContent("Add Noise Node"), false, ContextCallback, "noiseNode");
                    menu.AddItem(new GUIContent("Add Output Node"), false, ContextCallback, "outputNode");
                    menu.AddItem(new GUIContent("Add Calculation Node"), false, ContextCallback, "calculationNode");
                    menu.AddItem(new GUIContent("Add Wave Node"), false, ContextCallback, "waveNode");
                    menu.ShowAsContext();
                    e.Use();
                }
                else
                {
                    GenericMenu menu = new GenericMenu();
                    if (tempSelectedNode.GetType() != typeof(OutputNode))
                    {
                        menu.AddItem(new GUIContent("Make Transition"), false, ContextCallback, "makeTransition");
                    }
                    if (tempSelectedNode.GetType() == typeof(NoiseNode))
                    {
                        menu.AddItem(new GUIContent("Call Method"), false, ContextCallback, "callMethod");
                    }
                    menu.AddSeparator("");
                    menu.AddItem(new GUIContent("Delete Node"), false, ContextCallback, "deleteNode");
                    menu.ShowAsContext();
                    e.Use();
                }
            }
        }
        else if (e.button == 0 && e.type == EventType.MouseDown && makeTransitionMode)
        {
            bool     clickedOnWindow  = false;
            BaseNode tempSelectedNode = null;

            foreach (BaseNode node in nodes)
            {
                if (node.windowRect.Contains(mousePos))
                {
                    tempSelectedNode = node;
                    clickedOnWindow  = true;
                    break;
                }
            }
            if (clickedOnWindow && !tempSelectedNode.Equals(selectedNode))
            {
                tempSelectedNode.SetInput((BaseInputNode)selectedNode, mousePos);
                makeTransitionMode = false;
                selectedNode       = null;
            }
            if (!clickedOnWindow)
            {
                makeTransitionMode = false;
                selectedNode       = null;
            }
        }
        else if (e.button == 0 && e.type == EventType.MouseDown && !makeTransitionMode)
        {
            bool     clickedOnWindow  = false;
            BaseNode tempSelectedNode = null;

            foreach (BaseNode node in nodes)
            {
                if (node.windowRect.Contains(mousePos))
                {
                    tempSelectedNode = node;
                    clickedOnWindow  = true;
                    break;
                }
            }
            if (clickedOnWindow)
            {
                BaseInputNode nodeToChange = tempSelectedNode.ClickedOnInput(mousePos);
                if (nodeToChange != null)
                {
                    makeTransitionMode = true;
                    selectedNode       = nodeToChange;
                }
            }
        }
        if (makeTransitionMode && selectedNode != null)
        {
            Rect mouseRect = new Rect(mousePos.x, mousePos.y, 10, 10);
            DrawNodeCurve(selectedNode.outputRect, mouseRect);
            Repaint();
        }
        for (int i = nodes.Count - 1; i >= 0; i--)
        {
            if (nodes[i] == null)
            {
                nodes.Remove(nodes[i]);
            }
        }
        foreach (BaseNode n in nodes)
        {
            if (n != null)
            {
                n.DrawCurves();
            }
        }
        scrollPos = GUI.BeginScrollView(new Rect(0, 0, position.width, position.height), scrollPos, new Rect(0, 0, 1000, 1000));

        BeginWindows();
        for (int i = 0; i < nodes.Count; i++)
        {
            nodes[i].windowRect = GUILayout.Window(i, nodes[i].windowRect, DrawNodeWindow, nodes[i].windowTitle);
            nodes[i].id         = i;
        }
        EndWindows();
        GUI.EndScrollView();
    }