Ejemplo n.º 1
0
        public void MoveNode(NodeDesigner dstNode)
        {
            Log.Info("Move  node");

            if (mSelectedNode == null)
            {
                return;
            }
            NodeDesigner node1   = dstNode;
            NodeDesigner node2   = mSelectedNode;
            NodeDesigner parent1 = node1.Parent;
            NodeDesigner parent2 = node2.Parent;

            //根节点不可交换
            if (parent2 == null)
            {
                return;
            }

            //不同父,插到node1的子节点
            if (!node1.NodeData.CanAddChild())
            {
                return;
            }

            parent2.RemoveChild(node2);
            parent2.AutoSort();
            node1.AddChild(node2);
            node1.AutoSort();
            //BTEntity.GetInstance().ResetTreeId();
        }
Ejemplo n.º 2
0
        public NodeDesigner CreateNode(BehaviorNodeData nodeData, Vector2 pos)
        {
            NodeDesigner node = new NodeDesigner(nodeData);

            node.Pos = pos == Vector2.zero? CenterPosInBorder() : pos;
            if (mSelectedNode != null)
            {
                mSelectedNode.AddChild(node);
                mSelectedNode.AutoSort();
            }
            else
            {
                mDetachedNodes.Add(node);
            }
            BehaviorManager.GetInstance().ResetTreeId();
            Game.Scene.GetComponent <EventComponent>().Run(EventIdType.BehaviorTreeCreateNode, node);
            return(node);
        }
Ejemplo n.º 3
0
        public NodeDesigner CreateNode(BehaviorNodeData nodeData, Vector2 pos)
        {
            NodeDesigner node = new NodeDesigner(nodeData)
            {
                Pos = pos == Vector2.zero ? CenterPosInBorder() : pos
            };

            if (mSelectedNode != null)
            {
                mSelectedNode.AddChild(node);
                mSelectedNode.AutoSort();
            }
            else
            {
                mDetachedNodes.Add(node);
            }
            BTEditor.Instance.ResetTreeId();
            Game.EventSystem.Run(EventIdType.BehaviorTreeCreateNode, node);
            return(node);
        }
Ejemplo n.º 4
0
        public void ShiftNode(NodeDesigner dstNode)
        {
            Log.Info("shift node");

            if (mSelectedNode == null)
            {
                return;
            }
            NodeDesigner node1   = dstNode;
            NodeDesigner node2   = mSelectedNode;
            NodeDesigner parent1 = node1.Parent;
            NodeDesigner parent2 = node2.Parent;

            //根节点不可交换
            if (parent2 == null)
            {
                return;
            }
            //同父交换位置
            if (parent1 == parent2)
            {
                parent1.RemoveChild(node2);
                int idx = parent1.Children.IndexOf(node1);
                parent1.AddChild(node2, idx);
                parent1.AutoSort();
                //BTEntity.GetInstance().ResetTreeId();
            }

            //             //不同父,插到node1的子节点
            //             if (!node1.NodeData.CanAddChild())
            //                 return;
            //
            //             parent2.RemoveChild(node2);
            //             parent2.AutoSort();
            //             node1.AddChild(node2);
            //             node1.AutoSort();
            //             BTEntity.GetInstance().ResetTreeId();
        }
Ejemplo n.º 5
0
        //src接到dst的子节点
        public void ConnectNode(NodeDesigner srcNode, NodeDesigner dstNode)
        {
            if (srcNode == null || dstNode == null || !dstNode.NodeData.CanAddChild())
            {
                return;
            }
            if (srcNode.FindChild(dstNode))
            {
                //src有dst这个子节点不让连,避免死循环
                //Log.Info("found child");
                return;
            }

            var parent = srcNode.Parent;

            if (parent != null)
            {
                parent.RemoveChild(srcNode);
            }
            dstNode.AddChild(srcNode);
            dstNode.AutoSort();

            mDetachedNodes.Remove(srcNode);
        }