Example #1
0
        //有待优化
        private void ChangeNodeType(object obj)
        {
            string nodeType  = (string)obj;
            var    nodeProto = BehaviorManager.GetInstance().GetNodeTypeProto(nodeType);
            var    nodeData  = BehaviorManager.GetInstance().CreateNode((int)BehaviorManager.GetInstance().CurTree.Id, nodeProto.name);
            var    oldNode   = mSelectedNode;
            var    newNode   = new NodeDesigner(nodeData);

            if (oldNode == RootNode)
            {
                newNode.NodeData.nodeId = RootNode.NodeData.nodeId;
                RootNode = newNode;
                var oldTree = BehaviorManager.GetInstance().CurTree;
                var newTree = new BehaviorTreeData(oldTree.Id);
                newTree.classify = oldTree.classify;
                newTree.Root     = nodeData;
                BehaviorManager.GetInstance().CurTree = newTree;
            }
            else
            {
                int idx = oldNode.Parent.Children.IndexOf(oldNode);
                oldNode.Parent.AddChild(newNode, idx);
                oldNode.Parent.RemoveChild(oldNode);
            }

            foreach (var child in oldNode.Children)
            {
                newNode.AddChild(child);
            }
            BehaviorManager.GetInstance().ResetTreeId();
            Game.Scene.GetComponent <EventComponent>().Run(EventIdType.BehaviorTreeAfterChangeNodeType);
        }
Example #2
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();
        }
Example #3
0
        //有待优化
        private void ChangeNodeType(object obj)
        {
            string           nodeType  = (string)obj;
            NodeMeta         nodeProto = BTEditor.Instance.GetComponent <BTNodeInfoComponent>().GetNodeMeta(nodeType);
            BehaviorNodeData nodeData  = BTEditor.Instance.CreateNode(nodeProto.name);
            NodeDesigner     oldNode   = mSelectedNode;
            NodeDesigner     newNode   = new NodeDesigner(nodeData);

            if (oldNode == RootNode)
            {
                newNode.NodeData.Id = RootNode.NodeData.Id;
                RootNode            = newNode;
                BehaviorTreeData oldTree = BTEditor.Instance.CurTree;
                BehaviorTreeData newTree = new BehaviorTreeData()
                {
                    classify = oldTree.classify,
                    Root     = nodeData
                };
                BTEditor.Instance.CurTree = newTree;
            }
            else
            {
                int idx = oldNode.Parent.Children.IndexOf(oldNode);
                oldNode.Parent.AddChild(newNode, idx);
                oldNode.Parent.RemoveChild(oldNode);
            }

            foreach (NodeDesigner child in oldNode.Children)
            {
                newNode.AddChild(child);
            }
            BTEditor.Instance.ResetTreeId();
            Game.EventSystem.Run(EventIdType.BehaviorTreeAfterChangeNodeType);
        }
Example #4
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);
        }
Example #5
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);
        }
Example #6
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();
        }
Example #7
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);
        }