//有待优化 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); }
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(); }
//有待优化 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); }
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); }
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); }
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(); }
//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); }