public EditBehaviorTreeForm(BehaviorTreeDesigner behaviorTree) { m_BehaviorTree = behaviorTree; m_BehaviorTreeContent = XmlUtility.ObjectToString(m_BehaviorTree); m_EditBehaviorTree = XmlUtility.StringToObject <BehaviorTreeDesigner>(m_BehaviorTreeContent); InitializeComponent(); }
public void BindGroup(BehaviorGroupDesigner group) { if (string.IsNullOrEmpty(group.GroupName) || GroupDic.ContainsKey(group.GroupName)) { return; } GroupItem groupItem = new GroupItem(); groupItem.Group = group; groupItem.Group.GroupName = group.GroupName; GroupDic.Add(group.GroupName, groupItem); TreeNode treeNode = m_TreeView.Nodes.Add(GetGroupTreeNodeName(group)); treeNode.Tag = groupItem; groupItem.TreeNode = treeNode; for (int i = 0; i < group.BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = group.BehaviorTrees[i]; TreeNode tempTreeNode = treeNode.Nodes.Add(GetTreeNodeName(behaviorTree)); BehaviorTreeItem behaviorTreeItem = new BehaviorTreeItem(); behaviorTreeItem.BehaviorTree = behaviorTree; behaviorTreeItem.GroupItem = groupItem; behaviorTreeItem.TreeNode = tempTreeNode; tempTreeNode.Tag = behaviorTreeItem; } }
public BehaviorTreeItem AddBehaviorTree(BehaviorTreeDesigner behaviorTree, int index = -1) { if (!Group.AddBehaviorTree(behaviorTree)) { return(null); } string name = string.IsNullOrEmpty(behaviorTree.Name) ? behaviorTree.ID : string.Format("{0} ({1})", behaviorTree.ID, behaviorTree.Name); TreeNode tempNode; if (index != -1) { tempNode = TreeNode.Nodes.Insert(index, name); } else { tempNode = TreeNode.Nodes.Add(name); } BehaviorTreeItem behaviorTreeItem = new BehaviorTreeItem(); behaviorTreeItem.GroupItem = this; behaviorTreeItem.BehaviorTree = behaviorTree; behaviorTreeItem.TreeNode = tempNode; tempNode.Tag = behaviorTreeItem; return(behaviorTreeItem); }
public void RemoveBehaviorTree(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == null) { throw new System.Exception("TreeViewManager.RemoveBehaviorTree(), behaviorTree is null."); } for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner temp = m_BehaviorTrees[i]; if (temp == behaviorTree) { m_BehaviorTrees.RemoveAt(i); break; } } BehaviorTreeItem behaviorTreeItem = FindBehaviorTreeItem(behaviorTree); if (behaviorTreeItem == null) { return; } behaviorTreeItem.TreeNode.Remove(); }
/// <summary> /// 修正数据(和模板保持一致) /// </summary> public void AjustData() { for (int i = 0; i < m_Groups.Count; i++) { BehaviorGroupDesigner group = m_Groups[i]; if (group == null) { continue; } for (int j = 0; j < group.BehaviorTrees.Count; j++) { BehaviorTreeDesigner behaviorTree = group.BehaviorTrees[j]; if (behaviorTree != null) { behaviorTree.AjustData(); } } } for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (behaviorTree != null) { behaviorTree.AjustData(); } } }
/// <summary> /// 粘贴行为树 /// </summary> private void PasteBehaviorTree() { try { BehaviorTreeListContent content = XmlUtility.StringToObject <BehaviorTreeListContent>(Clipboard.GetText()); for (int i = 0; i < content.DataList.Count; i++) { BehaviorTreeDesigner behaviorTree = content.DataList[i]; string behaviorTreeID = "New_" + DateTime.Now.Ticks; do { behaviorTreeID = "New_" + DateTime.Now.Ticks; } while (BehaviorTreeData.ExistBehaviorTree(behaviorTreeID)); behaviorTree.ID = behaviorTreeID; TreeViewManager.AddBehaviorTree(behaviorTree); } ShowInfo("您粘贴了" + content.DataList.Count + "个行为树!!!"); } catch (Exception ex) { ShowInfo("无法进行粘贴,错误信息:" + ex.Message); ShowMessage("无法进行粘贴,错误信息:" + ex.Message, "警告"); } }
public void DeleteGroup(Group group) { foreach (var kv in GroupDic) { if (kv.Value.Group == group) { kv.Value.TreeNode.Remove(); } } if (GroupDic.ContainsKey(group.GroupName)) { GroupDic.Remove(group.GroupName); } m_Groups.Remove(group); for (int i = m_BehaviorTrees.Count - 1; i >= 0; i--) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (behaviorTree.GroupName == group.GroupName) { m_BehaviorTrees.RemoveAt(i); } } }
public GroupItem AddGroup(BehaviorGroupDesigner group) { if (string.IsNullOrEmpty(group.GroupName) || GroupDic.ContainsKey(group.GroupName)) { return(null); } m_Groups.Add(group); GroupItem groupItem = new GroupItem(); groupItem.Group = group; GroupDic.Add(group.GroupName, groupItem); TreeNode treeNode = m_TreeView.Nodes.Insert(m_Groups.Count - 1, GetGroupTreeNodeName(group)); treeNode.Tag = groupItem; groupItem.TreeNode = treeNode; m_TreeView.SelectedNode = treeNode; for (int i = 0; i < group.BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = group.BehaviorTrees[i]; TreeNode tempTreeNode = treeNode.Nodes.Add(behaviorTree.ID); BehaviorTreeItem behaviorTreeItem = new BehaviorTreeItem(); behaviorTreeItem.BehaviorTree = behaviorTree; behaviorTreeItem.GroupItem = groupItem; behaviorTreeItem.TreeNode = tempTreeNode; tempTreeNode.Tag = behaviorTreeItem; } return(groupItem); }
public void Debug(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == null) { MainForm.Instance.ShowMessage("行为树为空"); return; } m_Nodes.Clear(); VerifyInfo verifyBehaviorTree = behaviorTree.VerifyBehaviorTree(); if (verifyBehaviorTree.HasError) { MainForm.Instance.ShowMessage("确保行为树编辑正确后才能调试\n" + verifyBehaviorTree.Msg); return; } for (int i = 0; i < behaviorTree.Nodes.Count; i++) { NodeDesigner node = behaviorTree.Nodes[i]; if (node.StartNode) { m_DebugNode = CreateDebugNode(behaviorTree, node); break; } } State = DebugState.Running; ContentUserControl.Instance.OnDebugStart(); MainForm.Instance.ShowInfo("播放成功 时间:" + DateTime.Now); }
/// <summary> /// 判断行为树是否存在 /// </summary> /// <param name="behaviroTree">行为树</param> /// <returns>true:存在</returns> public bool ExistBehaviorTree(BehaviorTreeDesigner behaviroTree) { if (behaviroTree == null) { throw new Exception("BehaviorTreeData.ExistBehaviorTree() error: behaviroTree = null"); } for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner tempBehaviorTree = m_BehaviorTrees[i]; if (tempBehaviorTree == null) { continue; } if (tempBehaviorTree == behaviroTree) { return(true); } if (tempBehaviorTree.ID == behaviroTree.ID) { return(true); } } return(false); }
public void RemoveBehaviorTree(string behaviorTreeID) { for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (behaviorTree.ID == behaviorTreeID) { m_BehaviorTrees.RemoveAt(i); break; } } BehaviorTreeItem behaviorTreeItem = FindBehaviorTreeItem(behaviorTreeID); if (behaviorTreeItem == null) { return; } int index = GetIndex(behaviorTreeItem); m_TreeView.Nodes.Remove(behaviorTreeItem.TreeNode); if (index >= 0 && index < m_TreeView.Nodes.Count) { m_TreeView.SelectedNode = m_TreeView.Nodes[index]; } }
public static BTData.BehaviorTreeData CreateTreeData(BehaviorTreeDataDesigner treeData) { BTData.BehaviorTreeData data = new BTData.BehaviorTreeData(); //全局变量 for (int i = 0; i < treeData.GlobalVariable.VariableFields.Count; i++) { VariableFieldDesigner variableField = treeData.GlobalVariable.VariableFields[i]; BTData.BaseField variableFieldData = CreateVariableField(variableField); data.GlobalVariable.VariableFields.Add(variableFieldData); } //Context变量 for (int i = 0; i < treeData.ContextVariable.VariableFields.Count; i++) { VariableFieldDesigner variableField = treeData.ContextVariable.VariableFields[i]; BTData.BaseField variableFieldData = CreateVariableField(variableField); data.ContextVariable.VariableFields.Add(variableFieldData); } for (int i = 0; i < treeData.BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = treeData.BehaviorTrees[i]; if (behaviorTree == null) { continue; } data.BehaviorTrees.Add(CreateBehaviorTreeData(behaviorTree)); } return(data); }
//辅助行为树添加节点(粘贴添加) public static void AddNode(BehaviorTreeDesigner behaviorTree, NodeDesigner node) { node.ID = behaviorTree.GenNodeID(); if (node.StartNode) { node.StartNode = behaviorTree.ExistStartNode() ? false : true; } behaviorTree.AddNode(node); if (node.Transitions.Count > 0) { for (int i = 0; i < node.Transitions.Count; i++) { Transition transition = node.Transitions[i]; transition.FromNode = node; transition.FromNodeID = node.ID; NodeDesigner childNode = transition.ToNode; AddNode(behaviorTree, childNode); transition.ToNodeID = childNode.ID; } node.Sort(); } }
public static BTData.BehaviorTreeElement CreateBehaviorTreeData(BehaviorTreeDesigner behaviorTree) { BTData.BehaviorTreeElement data = new BTData.BehaviorTreeElement(); data.ID = behaviorTree.ID; //行为树变量 for (int i = 0; i < behaviorTree.BehaviorTreeVariableFields.Count; i++) { VariableFieldDesigner field = behaviorTree.BehaviorTreeVariableFields[i]; if (field == null) { continue; } data.BehaviorTreeVariables.Add(CreateVariableField(field)); } for (int i = 0; i < behaviorTree.Fields.Count; i++) { FieldDesigner field = behaviorTree.Fields[i]; if (field == null) { continue; } data.Fields.Add(CreateField(field)); } NodeDesigner startNode = behaviorTree.GetStartNode(); if (startNode != null) { data.StartNode = CreateNode(behaviorTree, startNode); } return(data); }
/// <summary> /// 检验行为树ID /// </summary> /// <returns></returns> public VerifyInfo VerifyBehaviorTreeID() { //校验ID是否为空 for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (string.IsNullOrEmpty(behaviorTree.ID)) { return(new VerifyInfo("行为树的ID为空")); } } //检验行为树ID是否相同 for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree_i = m_BehaviorTrees[i]; if (behaviorTree_i != null) { for (int ii = i + 1; ii < m_BehaviorTrees.Count; ii++) { BehaviorTreeDesigner behaviorTree_ii = m_BehaviorTrees[ii]; if (behaviorTree_i.ID == behaviorTree_ii.ID) { return(new VerifyInfo(string.Format("行为树存在相同ID:{0}", behaviorTree_i.ID))); } } } } return(VerifyInfo.DefaultVerifyInfo); }
public static BTData.NodeData CreateNode(BehaviorTreeDesigner behaviorTree, NodeDesigner nodeData) { BTData.NodeData data = new BTData.NodeData(); data.ID = nodeData.ID; data.ClassType = nodeData.ClassType; data.Label = nodeData.Label; data.X = (int)nodeData.Rect.x; data.Y = (int)nodeData.Rect.y; for (int i = 0; i < nodeData.Fields.Count; i++) { FieldDesigner field = nodeData.Fields[i]; if (field == null) { continue; } data.Fields.Add(CreateField(field)); } if (nodeData.Transitions.Count > 0) { data.Childs = new List <BTData.NodeData>(nodeData.Transitions.Count); for (int i = 0; i < nodeData.Transitions.Count; i++) { Transition transition = nodeData.Transitions[i]; NodeDesigner childNode = behaviorTree.FindByID(transition.ToNodeID); BTData.NodeData childNodeData = CreateNode(behaviorTree, childNode); data.Childs.Add(childNodeData); } } return(data); }
public BehaviorTreeItem BindBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { BehaviorTreeItem behaviorTreeItem = new BehaviorTreeItem(); behaviorTreeItem.BehaviorTree = behaviorTree; if (string.IsNullOrEmpty(behaviorTree.GroupName)) { TreeNode treeNode = m_TreeView.Nodes.Add(behaviorTree.ID); treeNode.Tag = behaviorTreeItem; behaviorTreeItem.GroupItem = null; behaviorTreeItem.TreeNode = treeNode; } else { GroupItem groupItem = FindGroup(behaviorTree.GroupName); //添加分组 if (groupItem == null) { groupItem = AddGroup(behaviorTree.GroupName); } TreeNode treeNode = groupItem.TreeNode.Nodes.Add(behaviorTree.ID); treeNode.Tag = behaviorTreeItem; behaviorTreeItem.GroupItem = groupItem; behaviorTreeItem.TreeNode = treeNode; } return(behaviorTreeItem); }
public void BindBehaviorTrees() { m_TreeView.Nodes.Clear(); GroupDic.Clear(); for (int i = 0; i < m_Groups.Count; i++) { Group group = m_Groups[i]; BindGroup(group); } //分组优先 for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (!string.IsNullOrEmpty(behaviorTree.GroupName)) { BindBehaviorTreeItem(behaviorTree); } } for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (string.IsNullOrEmpty(behaviorTree.GroupName)) { BindBehaviorTreeItem(behaviorTree); } } }
public BehaviorTreeItem AddBehaviorTree(BehaviorTreeDesigner behaviorTree) { m_BehaviorTrees.Add(behaviorTree); BehaviorTreeItem behaviorTreeItem = BindBehaviorTreeItem(behaviorTree); m_TreeView.SelectedNode = behaviorTreeItem.TreeNode; return(behaviorTreeItem); }
/// <summary> /// 设置选中的行为树 /// </summary> /// <param name="behaviorTree"></param> public void SetSelectedBehaviorTree(BehaviorTreeDesigner behaviorTree) { SelectedBehaviorTree = behaviorTree; if (m_ContentUserControl != null) { m_ContentUserControl.SetSelectedBehaviorTree(SelectedBehaviorTree); } }
//刷新行为树 private void UpdateBehaviorTree(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == null) { return; } TreeViewManager.UpdateBehaviorTreeItem(behaviorTree); }
public void UpdateBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { BehaviorTreeItem behaviorTreeItem = FindBehaviorTreeItem(behaviorTree); if (behaviorTreeItem != null) { behaviorTreeItem.TreeNode.Text = behaviorTree.ID; } }
/// <summary> /// 添加行为树 /// </summary> /// <param name="behaviorTree">behaviorTree</param> /// <returns>true:添加成功</returns> public bool AddBehaviorTree(BehaviorTreeDesigner behaviorTree) { if (ExistBehaviorTree(behaviorTree)) { return(false); } m_BehaviorTrees.Add(behaviorTree); return(true); }
/// <summary> /// 移除未定义的节点 /// </summary> public void RemoveUnDefineNode() { for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (behaviorTree != null) { behaviorTree.RemoveUnDefineNode(); } } }
/// <summary> /// 修正数据(和模板保持一致) /// </summary> public void AjustData() { for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (behaviorTree != null) { behaviorTree.AjustData(); } } }
/// <summary> /// 修改节点名字 /// </summary> /// <param name="old">旧的classType</param> /// <param name="newType">新的classType</param> public void UpdateClassType(string old, string newType) { for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = m_BehaviorTrees[i]; if (behaviorTree != null) { behaviorTree.UpdateClassType(old, newType); } } }
/// <summary> /// 添加行为树Item /// </summary> /// <param name="behaviorTree">行为树</param> /// <returns>true:添加成功</returns> public bool AddBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == null) { return(false); } TreeNode treeNode = treeView1.Nodes.Add(behaviorTree.ID); treeNode.Tag = behaviorTree; treeView1.SelectedNode = treeNode; return(true); }
//放到最后 public void AddLast(BehaviorTreeDesigner behaviorTree) { for (int i = 0; i < m_BehaviorTrees.Count; i++) { BehaviorTreeDesigner temp = m_BehaviorTrees[i]; if (temp.ID == behaviorTree.ID) { m_BehaviorTrees.RemoveAt(i); break; } } m_BehaviorTrees.Add(behaviorTree); }
public BehaviorTreeItem BindBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { BehaviorTreeItem behaviorTreeItem = new BehaviorTreeItem(); behaviorTreeItem.BehaviorTree = behaviorTree; TreeNode treeNode = m_TreeView.Nodes.Add(GetTreeNodeName(behaviorTree)); treeNode.Tag = behaviorTreeItem; behaviorTreeItem.GroupItem = null; behaviorTreeItem.TreeNode = treeNode; return(behaviorTreeItem); }
/// <summary> /// 更新BehaviorTree内容,但Nodes不能改 /// </summary> /// <param name="behaviorTree"></param> public void UpdateBehaviorTree(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == this) { return; } m_TreeID = behaviorTree.ID; m_Describe = behaviorTree.Describe; m_Fields.Clear(); m_Fields.AddRange(behaviorTree.Fields.ToArray()); m_BehaviorTreeVariables.Clear(); m_BehaviorTreeVariables.AddRange(behaviorTree.BehaviorTreeVariableFields.ToArray()); }