protected void UserInput(Event e)
        {
            if (currentGraph == null)
            {
                return;
            }

            BaseNode start = selectedNode;

            if (e.modifiers == EventModifiers.Control && e.keyCode == KeyCode.D && e.type == EventType.KeyUp)
            {
                if (currentGraph.selectedNodes.Count > 0)
                {
                    currentGraph.DuplicateSelection(mousePosition.x, mousePosition.y);
                }
                else
                {
                    if (selectedNode != null)
                    {
                        currentGraph.AddNode(selectedNode.drawNode, mousePosition.x, mousePosition.y, selectedNode.WindowTitle);
                    }
                }
                selectedNode = null;
                Repaint();
            }
            if (e.button == 1)
            {
                if (e.type == EventType.MouseDown)
                {
                    HandleGraphSelection(e);

                    RightClick(e);
                }
            }
            if (e.button == 0)
            {
                if (e.type == EventType.MouseDown)
                {
                    HandleGraphSelection(e);
                }

                if (e.type == EventType.MouseDrag)
                {
                    if (clickedOnWindow && currentGraph.selectedNodes.Count > 0)
                    {
                        for (int i = 0; i < currentGraph.selectedNodes.Count; i++)
                        {
                            currentGraph.selectedNodes[i].WindowRect.position += e.delta;
                        }
                    }
                    selectionBoxCurrentPos = mousePosition;
                    if (!creatingSelectionZone && !clickedOnWindow && e.modifiers == EventModifiers.Shift)
                    {
                        creatingSelectionZone = true;
                        selectionBoxStartPos  = selectionBoxCurrentPos;
                    }
                }

                if (e.type == EventType.MouseUp)
                {
                    if (creatingSelectionZone)
                    {
                        selectionBoxCurrentPos = mousePosition;
                        currentGraph.selectedNodes.Clear();
                        Rect r = new Rect(selectionBoxStartPos.x, selectionBoxStartPos.y, selectionBoxCurrentPos.x - selectionBoxStartPos.x, selectionBoxCurrentPos.y - selectionBoxStartPos.y);

                        foreach (BaseNode b in currentGraph.nodes)
                        {
                            if (r.Contains(b.WindowRect.position))
                            {
                                if (currentGraph.selectedNodes.Exists(s => s.ID == b.ID))
                                {
                                    continue;
                                }

                                currentGraph.selectedNodes.Add(b);
                                b.focused = true;
                            }
                        }
                        creatingSelectionZone = false;
                    }
                }


                if (e.type == EventType.MouseDown)
                {
                    HandleGraphSelection(e);

                    if (isMakingTransition)
                    {
                        BaseNode end = selectedNode;
                        MakeTransition(start, end);
                    }
                    if (!clickedOnWindow)
                    {
                        foreach (BaseNode b in currentGraph.selectedNodes)
                        {
                            b.focused = false;
                        }
                        currentGraph.selectedNodes.Clear();
                    }
                }
            }

            if (e.button == 2)
            {
                if (e.type == EventType.MouseDown && !clickedOnWindow)
                {
                    scrollStartPos = e.mousePosition;
                }
                else if (e.type == EventType.MouseDrag && !clickedOnWindow)
                {
                    HandlePanning(e);
                }
            }
            if (e.Equals(Event.KeyboardEvent("delete")) && (selectedNode != null || currentGraph.selectedNodes.Count > 0))
            {
                GUI.FocusControl(null); // removes focus from graph gui
                if (selectedNode != null && selectedNode.deletable && selectedNode.drawNode.Deletable)
                {
                    currentGraph.removeNodesIDs.Add(selectedNode.ID);
                }

                currentGraph.nodes.ForEach(f => { if (currentGraph.selectedNodes.Exists(n => n.ID == f.ID))
                                                  {
                                                      if (f.deletable && f.drawNode.Deletable)
                                                      {
                                                          currentGraph.removeNodesIDs.Add(f.ID);
                                                      }
                                                  }
                                           });
                currentGraph.UnFocusSelectedNodes();
                currentGraph.selectedNodes.Clear();


                Repaint();
            }
            if (e.type == EventType.ScrollWheel)
            {
                HandleZoom(e);
            }
        }
 public override void DrawCurve(BaseNode b)
 {
 }
        public override void DrawWindow(BaseNode b)
        {
#if UNITY_EDITOR
            b.condition = (ECondition)EditorGUILayout.EnumPopup(b.condition);
#endif
        }
 public override void DrawWindow(BaseNode b)
 {
     b.comment = GUILayout.TextArea(b.comment, 200);
 }
 public override void Execute(BaseNode b)
 {
 }
 public override void DrawWindow(BaseNode node)
 {
 }
 public override void Execute(BaseNode b)
 {
     b.BehaviourGraph.character.Animator.runtimeAnimatorController = b.animatorController;
     b.nodeCompleted = b.BehaviourGraph.character.Animator.runtimeAnimatorController == b.animatorController;
 }
 public override void DrawWindow(BaseNode b)
 {
     b.animatorController = EditorGUILayout.ObjectField(b.animatorController, typeof(RuntimeAnimatorController), false) as RuntimeAnimatorController;
 }