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(); }
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 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 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 BehaviorTreeItem FindBehaviorTreeItem(string behaviorTreeID) { for (int i = 0; i < m_TreeView.Nodes.Count; i++) { TreeNode treeNode = m_TreeView.Nodes[i]; if (treeNode.Tag != null && treeNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeNode.Tag as BehaviorTreeItem; if (behaviorTreeItem != null && behaviorTreeItem.BehaviorTree.ID == behaviorTreeID) { return(behaviorTreeItem); } } if (treeNode.Nodes.Count > 0) { for (int ii = 0; ii < treeNode.Nodes.Count; ii++) { TreeNode treeNode_ii = treeNode.Nodes[ii]; if (treeNode_ii.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeNode_ii.Tag as BehaviorTreeItem; if (behaviorTreeItem != null && behaviorTreeItem.BehaviorTree.ID == behaviorTreeID) { return(behaviorTreeItem); } } } } } return(null); }
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 BehaviorTreeItem AddBehaviorTree(BehaviorTreeDesigner behaviorTree) { m_BehaviorTrees.Add(behaviorTree); BehaviorTreeItem behaviorTreeItem = BindBehaviorTreeItem(behaviorTree); m_TreeView.SelectedNode = behaviorTreeItem.TreeNode; return(behaviorTreeItem); }
public void UpdateBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { BehaviorTreeItem behaviorTreeItem = FindBehaviorTreeItem(behaviorTree); if (behaviorTreeItem != null) { behaviorTreeItem.TreeNode.Text = behaviorTree.ID; } }
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); }
public void SetSelectItem(string behaviorTreeID) { if (string.IsNullOrEmpty(behaviorTreeID)) { m_TreeView.SelectedNode = null; } else { BehaviorTreeItem behaviorTreeItem = FindBehaviorTreeItem(behaviorTreeID); if (behaviorTreeItem != null) { m_TreeView.SelectedNode = behaviorTreeItem.TreeNode; } } }
public BehaviorTreeItem AddBehaviorTree(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == null) { throw new System.Exception("behaviorTree is null."); } if (ExistBehaviorTree(behaviorTree.ID)) { return(null); } m_BehaviorTrees.Add(behaviorTree); BehaviorTreeItem behaviorTreeItem = BindBehaviorTreeItem(behaviorTree); return(behaviorTreeItem); }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (treeView1.SelectedNode == null) { return; } if (treeView1.SelectedNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeView1.SelectedNode.Tag as BehaviorTreeItem; SetSelectedBehaviorTree(behaviorTreeItem.BehaviorTree); } else { SetSelectedBehaviorTree(null); } }
public int GetIndex(BehaviorTreeItem behaviorTreeItem) { if (behaviorTreeItem == null) { return(-1); } for (int i = 0; i < m_TreeView.Nodes.Count; i++) { TreeNode treeNode = m_TreeView.Nodes[i]; if (treeNode.Tag != null && treeNode.Tag == behaviorTreeItem) { return(i); } } return(-1); }
public BehaviorTreeItem FindBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { if (behaviorTree == null) { throw new System.ArgumentNullException("TreeViewManager.FindBehaviorTreeItem(), behaviorTree is null."); } if (behaviorTree != null) { for (int i = 0; i < m_TreeView.Nodes.Count; i++) { TreeNode treeNode = m_TreeView.Nodes[i]; if (treeNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeNode.Tag as BehaviorTreeItem; if (behaviorTreeItem.BehaviorTree == behaviorTree || behaviorTreeItem.BehaviorTree.ID == behaviorTree.ID) { return(behaviorTreeItem); } } if (treeNode.Nodes.Count > 0) { for (int ii = 0; ii < treeNode.Nodes.Count; ii++) { TreeNode treeNode_ii = treeNode.Nodes[ii]; if (treeNode_ii.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeNode_ii.Tag as BehaviorTreeItem; if (behaviorTreeItem.BehaviorTree == behaviorTree) { return(behaviorTreeItem); } } } } } } return(null); }
public bool RemoveBehaviorTree(BehaviorTreeDesigner behaviroTree) { if (!Group.RemoveBehaviorTree(behaviroTree)) { return(false); } for (int i = 0; i < TreeNode.Nodes.Count; i++) { TreeNode tempNode = TreeNode.Nodes[i]; BehaviorTreeItem behaviorTreeItem = tempNode.Tag as BehaviorTreeItem; if (behaviorTreeItem.BehaviorTree == behaviroTree) { behaviorTreeItem.GroupItem = null; tempNode.Remove(); break; } } return(true); }
public BehaviorTreeItem FindBehaviorTreeItem(BehaviorTreeDesigner behaviorTree) { if (behaviorTree != null) { for (int i = 0; i < m_TreeView.Nodes.Count; i++) { TreeNode treeNode = m_TreeView.Nodes[i]; if (treeNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeNode.Tag as BehaviorTreeItem; if (behaviorTreeItem.BehaviorTree == behaviorTree || behaviorTreeItem.BehaviorTree.ID == behaviorTree.ID) { return(behaviorTreeItem); } } if (treeNode.Nodes.Count > 0) { for (int ii = 0; ii < treeNode.Nodes.Count; ii++) { TreeNode treeNode_ii = treeNode.Nodes[ii]; if (treeNode_ii.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeNode_ii.Tag as BehaviorTreeItem; if (behaviorTreeItem.BehaviorTree == behaviorTree || behaviorTreeItem.BehaviorTree.ID == behaviorTree.ID) { return(behaviorTreeItem); } } } } } } return(null); }
private void DragDrop(object sender, DragEventArgs e) { TreeNode selectedNode = null; if (e.Data.GetDataPresent(typeof(TreeNode))) { selectedNode = (TreeNode)(e.Data.GetData(typeof(TreeNode))); } else { MessageBox.Show("error"); } m_TreeView.SelectedNode = selectedNode; Point Position = m_TreeView.PointToClient(new Point(e.X, e.Y)); TreeNode dropNode = m_TreeView.GetNodeAt(Position); if (dropNode == null) { if (selectedNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = selectedNode.Tag as BehaviorTreeItem; if (behaviorTreeItem.GroupItem != null) { behaviorTreeItem.TreeNode.Remove(); behaviorTreeItem.GroupItem = null; behaviorTreeItem.BehaviorTree.GroupName = null; m_TreeView.Nodes.Add(behaviorTreeItem.TreeNode); m_TreeView.SelectedNode = selectedNode; AddLast(behaviorTreeItem.BehaviorTree); } } return; } //本身 if (selectedNode == dropNode) { return; } //拖进指定组 if (selectedNode.Tag is BehaviorTreeItem && dropNode.Tag is GroupItem) { BehaviorTreeItem selectedBehaviorTreeItem = selectedNode.Tag as BehaviorTreeItem; GroupItem dropGroupItem = dropNode.Tag as GroupItem; //相同组 if (selectedBehaviorTreeItem.GroupItem == dropGroupItem) { return; } selectedBehaviorTreeItem.TreeNode.Remove(); selectedBehaviorTreeItem.GroupItem = dropGroupItem; selectedBehaviorTreeItem.BehaviorTree.GroupName = dropGroupItem.Group.GroupName; dropGroupItem.TreeNode.Nodes.Add(selectedBehaviorTreeItem.TreeNode); AddLast(selectedBehaviorTreeItem.BehaviorTree); } //交换组 else if (selectedNode.Tag is GroupItem && dropNode.Tag is GroupItem) { int selectedIndex = GetTreeViewIndex(selectedNode); int dropIndex = GetTreeViewIndex(dropNode); GroupItem selectedGroupItem = selectedNode.Tag as GroupItem; GroupItem dropGroupItem = dropNode.Tag as GroupItem; selectedGroupItem.TreeNode.Remove(); m_TreeView.Nodes.Insert(dropIndex, selectedNode); //把group1插入到group2的前面或者后面 InsertGroup(selectedGroupItem.Group, dropGroupItem.Group); } else if (selectedNode.Tag is BehaviorTreeItem && dropNode.Tag is BehaviorTreeItem) { BehaviorTreeItem selectedBehaviorTreeItem = selectedNode.Tag as BehaviorTreeItem; BehaviorTreeItem dropBehaviorTreeItem = dropNode.Tag as BehaviorTreeItem; //没有组的节点拖拽 if (selectedBehaviorTreeItem.GroupItem == null) { //加入组 if (dropBehaviorTreeItem.GroupItem != null) { GroupItem groupItem = dropBehaviorTreeItem.GroupItem as GroupItem; int dropIndex = GetGroupIndex(groupItem, dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); groupItem.TreeNode.Nodes.Add(selectedNode); selectedBehaviorTreeItem.GroupItem = groupItem; selectedBehaviorTreeItem.BehaviorTree.GroupName = groupItem.Group.GroupName; AddLast(selectedBehaviorTreeItem.BehaviorTree); } //没组的交换 else { int selectedIndex = GetTreeViewIndex(selectedNode); int dropIndex = GetTreeViewIndex(dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); m_TreeView.Nodes.Insert(dropIndex, selectedNode); //把行为树1插入行为树2的前面或者后面 InsertBehaviorTree(selectedBehaviorTreeItem.BehaviorTree, dropBehaviorTreeItem.BehaviorTree); } } //有组的节点拖拽 else if (selectedBehaviorTreeItem.GroupItem != null) { //删除组 if (dropBehaviorTreeItem.GroupItem == null) { GroupItem groupItem = selectedBehaviorTreeItem.GroupItem as GroupItem; int dropIndex = GetTreeViewIndex(dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); BehaviorTreeDesigner lastBehaviorTree = null; if (dropIndex < m_TreeView.Nodes.Count) { BehaviorTreeItem behaviorTreeItem = m_TreeView.Nodes[dropIndex].Tag as BehaviorTreeItem; lastBehaviorTree = behaviorTreeItem.BehaviorTree; } m_TreeView.Nodes.Add(selectedBehaviorTreeItem.TreeNode); selectedBehaviorTreeItem.GroupItem = null; selectedBehaviorTreeItem.BehaviorTree.GroupName = null; AddLast(selectedBehaviorTreeItem.BehaviorTree); } //组内交换 else if (selectedBehaviorTreeItem.GroupItem.Group.GroupName == dropBehaviorTreeItem.GroupItem.Group.GroupName) { GroupItem groupItem = selectedBehaviorTreeItem.GroupItem as GroupItem; int selectedIndex = GetGroupIndex(groupItem, selectedNode); int dropIndex = GetGroupIndex(groupItem, dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); dropBehaviorTreeItem.TreeNode.Remove(); if (dropIndex > selectedIndex) { groupItem.TreeNode.Nodes.Insert(selectedIndex, dropNode); groupItem.TreeNode.Nodes.Insert(dropIndex, selectedNode); } else { groupItem.TreeNode.Nodes.Insert(dropIndex, selectedNode); groupItem.TreeNode.Nodes.Insert(selectedIndex, dropNode); } //把行为树1插入行为树2的前面或者后面 InsertBehaviorTree(selectedBehaviorTreeItem.BehaviorTree, dropBehaviorTreeItem.BehaviorTree); } //把拖拽节点加入Drop的组 else { GroupItem dropGroupItem = dropBehaviorTreeItem.GroupItem as GroupItem; int dropIndex = GetGroupIndex(dropGroupItem, dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); BehaviorTreeDesigner lastBehaviorTree = null; if (dropIndex < dropGroupItem.TreeNode.Nodes.Count) { BehaviorTreeItem behaviorTreeItem = dropGroupItem.TreeNode.Nodes[dropIndex].Tag as BehaviorTreeItem; lastBehaviorTree = behaviorTreeItem.BehaviorTree; } dropGroupItem.TreeNode.Nodes.Insert(dropIndex, selectedBehaviorTreeItem.TreeNode); selectedBehaviorTreeItem.GroupItem = dropGroupItem; selectedBehaviorTreeItem.BehaviorTree.GroupName = dropGroupItem.Group.GroupName; AddLast(selectedBehaviorTreeItem.BehaviorTree); } } } else { return; } m_TreeView.SelectedNode = selectedNode; }
private void DragDrop(object sender, DragEventArgs e) { TreeNode selectedNode = null; if (e.Data.GetDataPresent(typeof(TreeNode))) { selectedNode = (TreeNode)(e.Data.GetData(typeof(TreeNode))); } else { MessageBox.Show("error"); } m_TreeView.SelectedNode = selectedNode; Point Position = m_TreeView.PointToClient(new Point(e.X, e.Y)); TreeNode dropNode = m_TreeView.GetNodeAt(Position); if (dropNode == null) { if (selectedNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = selectedNode.Tag as BehaviorTreeItem; //移除分组 if (behaviorTreeItem.GroupItem != null) { behaviorTreeItem.GroupItem.RemoveBehaviorTree(behaviorTreeItem.BehaviorTree); string id = behaviorTreeItem.BehaviorTree.ID; while (ExistBehaviorTree(id)) { id += "_New"; } behaviorTreeItem.BehaviorTree.ID = id; SetSelectItem(AddBehaviorTree(behaviorTreeItem.BehaviorTree)); } //放到最后 else { RemoveBehaviorTree(behaviorTreeItem.BehaviorTree); SetSelectItem(AddBehaviorTree(behaviorTreeItem.BehaviorTree)); } } return; } //本身 if (selectedNode == dropNode) { return; } //拖进指定组 if (selectedNode.Tag is BehaviorTreeItem && dropNode.Tag is GroupItem) { BehaviorTreeItem selectedBehaviorTreeItem = selectedNode.Tag as BehaviorTreeItem; GroupItem dropGroupItem = dropNode.Tag as GroupItem; //相同组 if (selectedBehaviorTreeItem.GroupItem == dropGroupItem) { return; } //删除原来分组的数据 if (selectedBehaviorTreeItem.GroupItem != null) { selectedBehaviorTreeItem.GroupItem.RemoveBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); } else { RemoveBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); } string id = selectedBehaviorTreeItem.BehaviorTree.ID; while (dropGroupItem.Group.ExistBehaviorTree(id)) { id += "_New"; } selectedBehaviorTreeItem.BehaviorTree.ID = id; SetSelectItem(dropGroupItem.AddBehaviorTree(selectedBehaviorTreeItem.BehaviorTree)); } //交换组 else if (selectedNode.Tag is GroupItem && dropNode.Tag is GroupItem) { int selectedIndex = GetTreeViewIndex(selectedNode); int dropIndex = GetTreeViewIndex(dropNode); GroupItem selectedGroupItem = selectedNode.Tag as GroupItem; GroupItem dropGroupItem = dropNode.Tag as GroupItem; selectedGroupItem.TreeNode.Remove(); dropGroupItem.TreeNode.Remove(); if (dropIndex > selectedIndex) { m_TreeView.Nodes.Insert(selectedIndex, dropNode); m_TreeView.Nodes.Insert(dropIndex, selectedNode); } else { m_TreeView.Nodes.Insert(dropIndex, selectedNode); m_TreeView.Nodes.Insert(selectedIndex, dropNode); } RefreshByTreeNode(); SetSelectItem(selectedNode.Tag as ITreeViewItem); } else if (selectedNode.Tag is BehaviorTreeItem && dropNode.Tag is BehaviorTreeItem) { BehaviorTreeItem selectedBehaviorTreeItem = selectedNode.Tag as BehaviorTreeItem; BehaviorTreeItem dropBehaviorTreeItem = dropNode.Tag as BehaviorTreeItem; //没有组的节点拖拽 if (selectedBehaviorTreeItem.GroupItem == null) { //加入组 if (dropBehaviorTreeItem.GroupItem != null) { //从没有组的列表中移除 RemoveBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); GroupItem groupItem = dropBehaviorTreeItem.GroupItem as GroupItem; int dropIndex = GetGroupIndex(groupItem, dropNode); string id = selectedBehaviorTreeItem.BehaviorTree.ID; while (groupItem.Group.ExistBehaviorTree(id)) { id += "_New"; } selectedBehaviorTreeItem.BehaviorTree.ID = id; BehaviorTreeItem behaviorTreeItem = groupItem.AddBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); SetSelectItem(behaviorTreeItem); } //没组的交换 else { int selectedIndex = GetTreeViewIndex(selectedNode); int dropIndex = GetTreeViewIndex(dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); dropBehaviorTreeItem.TreeNode.Remove(); if (dropIndex > selectedIndex) { m_TreeView.Nodes.Insert(selectedIndex, dropNode); m_TreeView.Nodes.Insert(dropIndex, selectedNode); } else { m_TreeView.Nodes.Insert(dropIndex, selectedNode); m_TreeView.Nodes.Insert(selectedIndex, dropNode); } RefreshByTreeNode(); SetSelectItem(selectedNode.Tag as ITreeViewItem); } } //有组的节点拖拽 else if (selectedBehaviorTreeItem.GroupItem != null) { //删除组 if (dropBehaviorTreeItem.GroupItem == null) { GroupItem groupItem = selectedBehaviorTreeItem.GroupItem as GroupItem; groupItem.RemoveBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); string id = selectedBehaviorTreeItem.BehaviorTree.ID; while (ExistBehaviorTree(id)) { id += "_New"; } selectedBehaviorTreeItem.BehaviorTree.ID = id; SetSelectItem(AddBehaviorTree(selectedBehaviorTreeItem.BehaviorTree)); } //组内交换 else if (selectedBehaviorTreeItem.GroupItem.Group.GroupName == dropBehaviorTreeItem.GroupItem.Group.GroupName) { GroupItem groupItem = selectedBehaviorTreeItem.GroupItem as GroupItem; int selectedIndex = GetGroupIndex(groupItem, selectedNode); int dropIndex = GetGroupIndex(groupItem, dropNode); selectedBehaviorTreeItem.TreeNode.Remove(); dropBehaviorTreeItem.TreeNode.Remove(); if (dropIndex > selectedIndex) { groupItem.TreeNode.Nodes.Insert(selectedIndex, dropNode); groupItem.TreeNode.Nodes.Insert(dropIndex, selectedNode); } else { groupItem.TreeNode.Nodes.Insert(dropIndex, selectedNode); groupItem.TreeNode.Nodes.Insert(selectedIndex, dropNode); } RefreshGroupByTreeNode(groupItem); SetSelectItem(selectedBehaviorTreeItem); } //把拖拽节点加入Drop的组 else { GroupItem dropGroupItem = dropBehaviorTreeItem.GroupItem as GroupItem; int dropIndex = GetGroupIndex(dropGroupItem, dropNode); if (selectedBehaviorTreeItem.GroupItem == null) { //从没有分组的列表移除 RemoveBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); } else { //从原分组中移除 selectedBehaviorTreeItem.GroupItem.RemoveBehaviorTree(selectedBehaviorTreeItem.BehaviorTree); } string id = selectedBehaviorTreeItem.BehaviorTree.ID; while (dropGroupItem.Group.ExistBehaviorTree(id)) { id += "_New"; } selectedBehaviorTreeItem.BehaviorTree.ID = id; SetSelectItem(dropGroupItem.AddBehaviorTree(selectedBehaviorTreeItem.BehaviorTree)); } } } else { return; } }
/// <summary> /// 添加行为树 /// </summary> private void AddBehaviorTree() { if (WorkSpaceData == null) { ShowMessage("当前没有工作空间,请新建或者打开工作空间!"); return; } if (BehaviorTreeData == null) { return; } string group = string.Empty; if (treeView1.SelectedNode != null) { if (treeView1.SelectedNode.Tag is GroupItem) { GroupItem groupItem = treeView1.SelectedNode.Tag as GroupItem; group = groupItem.Group.GroupName; } else if (treeView1.SelectedNode.Tag is BehaviorTreeItem) { BehaviorTreeItem behaviorTreeItem = treeView1.SelectedNode.Tag as BehaviorTreeItem; if (behaviorTreeItem.GroupItem != null) { group = behaviorTreeItem.GroupItem.Group.GroupName; } } } BehaviorTreeDesigner behaviorTree = new BehaviorTreeDesigner(); behaviorTree.GroupName = group; string behaviorTreeID = "New_" + DateTime.Now.Ticks; do { behaviorTreeID = "New_" + DateTime.Now.Ticks; } while (BehaviorTreeData.ExistBehaviorTree(behaviorTreeID)); behaviorTree.ID = behaviorTreeID; //创建开始节点 NodeDesigner startNode = null; NodeDefine nodeDefine = NodeTemplate.FindNode("Sequence"); if (nodeDefine != null) { Rect rect = new Rect(EditorUtility.Center.x, EditorUtility.Center.y, EditorUtility.NodeWidth, EditorUtility.NodeHeight); startNode = new NodeDesigner(nodeDefine.Label, nodeDefine.ClassType, rect); startNode.ID = behaviorTree.GenNodeID(); startNode.StartNode = true; startNode.NodeType = nodeDefine.NodeType; //创建字段 for (int i = 0; i < nodeDefine.Fields.Count; i++) { NodeField nodeField = nodeDefine.Fields[i]; FieldDesigner field = EditorUtility.CreateFieldByNodeField(nodeField); if (field == null) { continue; } startNode.Fields.Add(field); } behaviorTree.AddNode(startNode); } //创建空操作节点 NodeDefine noopDefine = NodeTemplate.FindNode("Noop"); if (startNode != null && noopDefine != null) { Rect rect = new Rect(EditorUtility.Center.x + 250, EditorUtility.Center.y, EditorUtility.NodeWidth, EditorUtility.NodeHeight); NodeDesigner noopNode = new NodeDesigner(noopDefine.Label, noopDefine.ClassType, rect); noopNode.ID = behaviorTree.GenNodeID(); noopNode.NodeType = noopDefine.NodeType; noopNode.Describe = noopDefine.Describe; behaviorTree.AddNode(noopNode); startNode.AddChildNode(noopNode); } TreeViewManager.AddBehaviorTree(behaviorTree); }