Exemplo n.º 1
0
 public CustomTypeNode(CustomType type, CustomTypeNode parent, int level)
 {
     this.type   = type;
     this.level  = level;
     this.parent = parent;
 }
        private void HandleInput()
        {
            // Handle positioning and scaling of scroll view and nodes
            if (Event.current.type == EventType.KeyDown)
            {
                switch (Event.current.keyCode)
                {
                case KeyCode.RightArrow:
                    scrollPosition += new Vector2(panStep, 0);
                    break;

                case KeyCode.LeftArrow:
                    scrollPosition -= new Vector2(panStep, 0);
                    break;

                case KeyCode.UpArrow:
                    scrollPosition -= new Vector2(0, panStep);
                    break;

                case KeyCode.DownArrow:
                    scrollPosition += new Vector2(0, panStep);
                    break;

                case KeyCode.PageUp:
                    if (!Event.current.modifiers.ToString().Contains("Shift"))
                    {
                        zoomLevel++;
                    }
                    style.fontSize++;

                    Debug.LogWarning("ZOOM IN");
                    break;

                case KeyCode.PageDown:
                    if (!Event.current.modifiers.ToString().Contains("Shift"))
                    {
                        zoomLevel--;
                    }
                    style.fontSize--;
                    Debug.LogWarning("ZOOM OUT");
                    break;
                }
            }

            // Determine which node user has left-clicked on
            // NOTE: need to store selected node in "tempSelectedNode" to prevent Unity bug that occurs when
            //      selected node is immediately modified in same frame
            if (previousEvent == EventType.Layout)
            {
                if (Event.current.type == EventType.MouseDown)
                {
                    Vector2 mousePos = Event.current.mousePosition;
                    foreach (LinkedList <CustomTypeNode> nodeList in allNodes.Values)
                    {
                        foreach (CustomTypeNode n in nodeList)
                        {
                            if (n.rect.Contains(mousePos + scrollPosition))
                            {
                                tempSelectedNode = n;
                            }
                        }
                    }
                }
            }

            // Need this interim step to prevent Unity bug when immediately referencing the selected node
            if (previousEvent == EventType.Repaint)
            {
                selectedNode = tempSelectedNode;
            }
        }