示例#1
0
    protected virtual void OnMenu()
    {
        if (ReadOnly)
        {
            return;
        }
        if (Selecteds.Count == 0)
        {
            var dropDown = new StateNodeCreatDropdown(this, StateNodeRef.Empty, false, false);
            dropDown.Show(new Rect(Canvas.MouseInView, new Vector2(250, 20)));
            return;
        }
        var menu      = new GenericMenu();
        int copyCount = Selecteds.Count(it => Graph.CheckCopy(it.Node));

        AddMenuItem(menu, "复制", copyCount > 0, CopyNodes);
        AddMenuItem(menu, "粘贴", StateNodeClipboard.Clipboard.ContainsKey(Graph.GetType()), PasteFromClipboard);
        AddMenuItem(menu, "Duplicate", copyCount > 0, () => Duplicate());
        menu.AddSeparator("");
        AddMenuItem(menu, "删除", Graph.CheckDelete(Selecteds[0]), () => DeleteSelectedNode());
        if (Selecteds.Count == 1)
        {
            menu.AddSeparator("");
            var node = Selecteds[0];
            AddMenuItem(menu, "替换", VaildTypes.Count(it => Graph.CheckReplace(node.Node.NodeType, it)) > 0, () =>
            {
                var dropDown = new StateNodeReplaceDropdown(this, node);
                dropDown.Show(new Rect(Canvas.MouseInView, new Vector2(250, 0)));
            });
            if (Graph.IsStack(node.Node))
            {
                AddMenuItem(menu, "清空组", Graph.Links.Exists(it => it.IsChild && it.From == node), () => BreakChildLink(node));
            }
            else
            {
                menu.AddSeparator("");
                if (!node.Node.Parent)
                {
                    menu.AddItem(new GUIContent("反转"), node.Node.Reversal, () => SetNodeReversal(node.Node, !node.Node.Reversal));
                }
            }
            AddMenuItem(menu, "选中同类型节点", true, SelectSameType);
        }
        menu.ShowAsContext();
    }
示例#2
0
    public void OnDragEnd(StateGraphView view, Vector2 ptInWorld)
    {
        var currNode = view.HitTest(ptInWorld);

        if (currNode == node)
        {
            if (!isChild)
            {
                return;
            }
            currNode = null;
        }
        if (currNode != null)
        {
            StateNode from;
            StateNode to;
            if (isOut)
            {
                from = node.Node;
                to   = currNode;
            }
            else
            {
                to   = node.Node;
                from = currNode;
            }
            view.CreateLink(from, to, isChild);
            view.SelectNode(currNode);
        }
        else
        {
            //此处弹出创建节点下拉窗口
            StateNodeCreatDropdown dropDown = new StateNodeCreatDropdown(view, node, isOut, isChild);
            dropDown.Show(new Rect(view.Canvas.MouseInView, new Vector2(250, 0)));
        }
    }