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();
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        public BehaviorTreeItem AddBehaviorTree(BehaviorTreeDesigner behaviorTree)
        {
            m_BehaviorTrees.Add(behaviorTree);
            BehaviorTreeItem behaviorTreeItem = BindBehaviorTreeItem(behaviorTree);

            m_TreeView.SelectedNode = behaviorTreeItem.TreeNode;
            return(behaviorTreeItem);
        }
Exemplo n.º 9
0
        public void UpdateBehaviorTreeItem(BehaviorTreeDesigner behaviorTree)
        {
            BehaviorTreeItem behaviorTreeItem = FindBehaviorTreeItem(behaviorTree);

            if (behaviorTreeItem != null)
            {
                behaviorTreeItem.TreeNode.Text = behaviorTree.ID;
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
 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;
         }
     }
 }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
            }
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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;
        }
Exemplo n.º 19
0
        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;
            }
        }
Exemplo n.º 20
0
        /// <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);
        }