void SelectNode() { int controlID = GUIUtility.GetControlID(FocusType.Passive); if (!canvasRect.Contains(_cachedMousePosition)) { return; } switch (_currentEvent.rawType) { case EventType.MouseDown: if (_currentEvent.button == 2) { return; } _selectType = SelectType.None; if (_makeTranstion) { Node node = MouseOverNode(); if (node != null && node != _selectNodes [0]) { if (node.type == NodeType.Node) { AddTranstition(_selectNodes [0], node); } else { TransitionGroup(_selectNodes [0], node); } } _makeTranstion = false; _selectNodes.Clear(); } else { //Select Node GUIUtility.hotControl = controlID; selectionStartPosition = _cachedMousePosition; _selectTransition = null; Node node = MouseOverNode(); if (node != null) { if (_selectNodes.Count > 0 && node == _selectNodes [0] && _currentEvent.clickCount == 2 && node.type == NodeType.NodeGroup) { if (node.GetPath() != _currentGroupPath) { //double SelectGroup(node); } else { SelectGroupUp(node); } } else { _selectNodes.Clear(); _selectNodes.Add(node); GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; if (node.type == NodeType.Node) { _selectType = SelectType.Node; } else { _selectType = SelectType.NodeGroud; } } } else { for (int i = 0; i < _transitionLines.Count; i++) { if (CheckPointInLine(_transitionLines[i].startPos, _transitionLines[i].endPos, _cachedMousePosition, 1)) { _selectTransition = _transitionLines[i].line; _selectType = SelectType.Transition; } } } selectionMode = NodeSelectionMode.Pick; //Select Trasnstion } break; case EventType.MouseUp: _draging = false; if (GUIUtility.hotControl == controlID) { selectionMode = NodeSelectionMode.None; GUIUtility.hotControl = 0; _currentEvent.Use(); } break; case EventType.MouseDrag: _selectTransition = null; if (GUIUtility.hotControl == controlID && !EditorGUI.actionKey && !_currentEvent.shift && (selectionMode == NodeSelectionMode.Pick || selectionMode == NodeSelectionMode.Rect)) { selectionMode = NodeSelectionMode.Rect; SelectNodesInRect(FromToRect(selectionStartPosition, _cachedMousePosition)); _selectType = _selectNodes.Count > 1?SelectType.NodeGroud:SelectType.Node; _currentEvent.Use(); } break; case EventType.Repaint: if (GUIUtility.hotControl == controlID && selectionMode == NodeSelectionMode.Rect) { NodeStyles.selectionRect.Draw(FromToRect(selectionStartPosition, _cachedMousePosition), false, false, false, false); } break; } }
void SelectNode() { int controlID = GUIUtility.GetControlID(FocusType.Passive); if (!canvasRect.Contains(mousePosition)) { return; } switch (currentEvent.rawType) { case EventType.MouseDown: if (currentEvent.button == 2) { return; } selectType = SelectType.None; if (makeTranstion) { Node node = MouseOverNode(); if (node != null && node != selectNodes [0]) { if (node.type == NodeType.Node) { AddTranstition(selectNodes [0], node); } else { TransitionGroup(selectNodes [0], node); } } makeTranstion = false; selectNodes.Clear(); } else { //Select Node GUIUtility.hotControl = controlID; selectionStartPosition = mousePosition; selectTransition = null; Node node = MouseOverNode(); if (node != null) { if (selectNodes.Count > 0 && node == selectNodes [0] && currentEvent.clickCount == 2 && node.type == NodeType.NodeGroup) { if (node.GetPath() != groupPaths) { //double SelectGroup(node); } else { SelectGroupUp(node); } } else { selectNodes.Clear(); selectNodes.Add(node); GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; if (node.type == NodeType.Node) { selectType = SelectType.Node; } else { selectType = SelectType.NodeGroud; } } } else { for (int i = 0; i < transitionLines.Count; i++) { if (CheckPointInLine(transitionLines[i].startPos, transitionLines[i].endPos, mousePosition, 1)) { selectTransition = transitionLines[i].line; selectType = SelectType.Transition; } } // for(int i = 0;i < nodes.Count;i++){ // for (int x = 0; x < nodes [i].transition.Length; x++) { // NodeTransition tr = nodes [i].transition [x]; // Vector2 p1 = FindNodeWithHashByAll (tr.fromNode).position.center + offset; // Vector2 p2 = FindNodeWithHashByAll (tr.toNode).position.center + offset; // // // if (CheckPointInLine (p1,p2, mousePosition, 1)) { // selectTransition = tr; // selectType = SelectType.Transition; // } // } // } } selectionMode = NodeSelectionMode.Pick; //Select Trasnstion } break; case EventType.MouseUp: drag = false; if (GUIUtility.hotControl == controlID) { selectionMode = NodeSelectionMode.None; GUIUtility.hotControl = 0; currentEvent.Use(); } break; case EventType.MouseDrag: selectTransition = null; if (GUIUtility.hotControl == controlID && !EditorGUI.actionKey && !currentEvent.shift && (selectionMode == NodeSelectionMode.Pick || selectionMode == NodeSelectionMode.Rect)) { selectionMode = NodeSelectionMode.Rect; SelectNodesInRect(FromToRect(selectionStartPosition, mousePosition)); selectType = selectNodes.Count > 1?SelectType.NodeGroud:SelectType.Node; currentEvent.Use(); } break; case EventType.Repaint: if (GUIUtility.hotControl == controlID && selectionMode == NodeSelectionMode.Rect) { NodeStyles.selectionRect.Draw(FromToRect(selectionStartPosition, mousePosition), false, false, false, false); } break; } }