Beispiel #1
0
    public void OnGUI()
    {
        AssignSelectedGroup();

        NodeGroup selectedGroup = NodifyEditorUtilities.currentSelectedGroup;

        if (selectedGroup != null)
        {
            selectedGroup.SetHideStateChildrenNonNodes(HideFlags.None);

            OnDrawEditorBackground();

            NodifyEditorUtilities.BeginZoomArea(selectedGroup.editorZoomAmount, new Rect(0, 0, Screen.width, Screen.height));

            this.RemoveNotification();

            selectedGroup.editorWindowOffset.x = Mathf.Min(selectedGroup.editorWindowOffset.x, 0);
            selectedGroup.editorWindowOffset.y = Mathf.Min(selectedGroup.editorWindowOffset.y, 0);

            this.OnDrawEditorGrid();

            if (selectedGroup != null)
            {
                if (NodifyEditorUtilities.currentConnectingAnchor != null)
                {
                    DrawCurrentConnectingAnchor(NodifyEditorUtilities.currentConnectingAnchor);
                }

                /// Begin Node Anchor Rendering (Anchors rendered behind everything)
                foreach (Node node in selectedGroup.childNodes)
                {
                    foreach (Anchor anchor in node.anchors)
                    {
                        for (int i = 0; i < anchor.anchorConnections.Count; i++)
                        {
                            if (anchor.anchorConnections[i] == null)
                            {
                                continue;
                            }

                            DrawAnchorConnection(anchor.anchorConnections[i]);
                        }

                        for (int i = 0; i < anchor.nodeConnections.Count; i++)
                        {
                            if (anchor.nodeConnections[i] == null)
                            {
                                continue;
                            }

                            DrawNodeConnection(anchor.nodeConnections[i]);
                        }
                    }
                }
                // End Node Anchor Rendering

                //Begin Node Group Anchor Rendering
                foreach (NodeGroup nodeGroup in selectedGroup.childGroups)
                {
                    foreach (Anchor anchor in nodeGroup.anchors)
                    {
                        foreach (AnchorConnection connection in anchor.anchorConnections)
                        {
                            DrawAnchorConnection(connection);
                        }

                        foreach (NodeConnection connection in anchor.nodeConnections)
                        {
                            DrawNodeConnection(connection);
                        }
                    }
                }
                // End Node Group Anchor Rendering

                // Node Rendering
                foreach (Node node in selectedGroup.childNodes)
                {
                    if (node.GetComponent <NodeGroup>())
                    {
                        continue;
                    }

                    foreach (Anchor anchor in node.anchors)
                    {
                        DrawAnchor(anchor);
                    }

                    DrawNode(node);
                }
                // End Node Rendering

                // Node Group Rendering
                foreach (NodeGroup nodeGroup in selectedGroup.childGroups)
                {
                    if (nodeGroup == selectedGroup)
                    {
                        continue;
                    }

                    foreach (Anchor anchor in nodeGroup.anchors)
                    {
                        DrawAnchor(anchor);
                    }

                    DrawNodeGroup(nodeGroup);
                }
                // End Node Group Rendering
            }

            NodifyEditorUtilities.EndZoomArea();

            HandleEditorEvents(selectedGroup);

            if (MouseSelection == true && Event.current.type == EventType.Repaint)
            {
                editorSelectionRect.Draw(RectExtensions.GetRectFromPoints(MouseSelectionStartPoint, Event.current.mousePosition), false, false, false, false);
            }
        }
        else
        {
            ShowNotification(new GUIContent("Create or Select a Node Group"));
        }

        DrawToolbar();
        DrawBreadcrumbs();
        DrawLogo();

        if (ShouldRepaint())
        {
            this.Repaint();
        }
    }