コード例 #1
0
ファイル: NodeEditor.cs プロジェクト: andyqingliu/NodeCanvas
        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;
            }
        }
コード例 #2
0
        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;
            }
        }