Ejemplo n.º 1
0
        private Node()
        {
            m_NextNodes = new List <Node <T> >();
            m_PrevNodes = new List <Node <T> >();
            this.RegisterCallback <PointerDownEvent>((a) =>
            {
                this.BringToFront();
            }, TrickleDown.NoTrickleDown);

            #region 节点顶部

            #region 连接点

            connectPointIn = new ConnectPoint <T>(this, Point.In);
            connectPointIn.AddToClassList("connectPoint");
            connectPointIn.RegisterCallback <PointerDownEvent>((a) => { a.StopPropagation(); });
            connectPointOut = new ConnectPoint <T>(this, Point.Out);
            connectPointOut.AddToClassList("connectPoint");
            connectPointOut.RegisterCallback <PointerDownEvent>((a) => { a.StopPropagation(); });

            #endregion

            Label label = new Label()
            {
                text = $"节点",
            };
            label.AddToClassList("text");

            VisualElement title = new VisualElement();
            title.AddToClassList("title");

            title.RegisterCallback <MouseMoveEvent>((a) =>
            {
                if (isMove)
                {
                    this.transform.position += (Vector3)a.mouseDelta;
                }
            });
            title.RegisterCallback <PointerDownEvent>((a) =>
            {
                isMove = true;
            });
            title.RegisterCallback <PointerUpEvent>((a) =>
            {
                isMove = false;
            });
            title.RegisterCallback <PointerEnterEvent>((a) =>
            {
                isMove = false;
            });

            title.Add(connectPointIn);
            title.Add(label);
            title.Add(connectPointOut);

            title.RegisterCallback <MouseDownEvent>((v) =>
            {
                if (v.button == 0 && v.clickCount == 2)
                {
                    if (Contains(m_ContentUI))
                    {
                        Remove(m_ContentUI);
                    }
                    else
                    {
                        Add(m_ContentUI);
                    }
                }
                else if (v.button == 1 && v.clickCount == 1)
                {
                    GenericMenu genericMenu = new GenericMenu();
                    genericMenu.AddItem(new GUIContent("Delete"), false, Delete);
                    NodeWindow.AddCreateNodeMenu(genericMenu, this.transform.position + new Vector3(150, 60, 0), "Add Next Node", (node) =>
                    {
                        AddNextNode(node);
                    });
                    NodeWindow.AddCreateNodeMenu(genericMenu, this.transform.position - new Vector3(20, 20, 0), "Add Prev Node", (node) =>
                    {
                        node.AddNextNode(this);
                    });
                    genericMenu.ShowAsContext();
                }
            });

            #endregion

            Add(title);
        }