//加载工作区
        public void LoadWorkSpace()
        {
            //读取行为树类信息
            NodeClasses = XmlUtility.Read <NodeClasses>(GetNodeClassPath());
            if (NodeClasses == null)
            {
                NodeClasses = new NodeClasses();
                NodeClasses.ResetEnums();
                NodeClasses.ResetNodes();
                XmlUtility.Save(MainForm.Instance.GetNodeClassPath(), MainForm.Instance.NodeClasses);
            }

            NodeClassesStringContent = XmlUtility.ObjectToString(NodeClasses);

            this.Text = Settings.Default.EditorTitle;
            if (string.IsNullOrEmpty(Settings.Default.WorkDirectory) || string.IsNullOrEmpty(Settings.Default.WorkSpaceName))
            {
                return;
            }

            WorkSpaceData = XmlUtility.Read <WorkSpaceData>(GetWorkSpacePath());

            if (WorkSpaceData == null)
            {
                return;
            }

            if (WorkSpaceData != null)
            {
                this.Text = string.Format("{0}[{1}]", Settings.Default.EditorTitle, WorkSpaceData.WorkSpaceName);
            }

            //读取行为树数据
            LoadBehaviorTreeData();
        }
        //打开工作区
        public void OpenWorkSpace()
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = string.Format("工作区配置|*{0}", Settings.Default.WorkSpaceSetupSuffix);
            openFileDialog.Title  = "打开工作区";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string workSpaceFile = openFileDialog.FileName.Trim();
                if (File.Exists(workSpaceFile))
                {
                    DirectoryInfo dirInfo       = new DirectoryInfo(workSpaceFile);
                    string        workDirectory = dirInfo.Parent.FullName;
                    WorkSpaceData = XmlUtility.Read <WorkSpaceData>(workSpaceFile);
                    if (WorkSpaceData != null)
                    {
                        Settings.Default.WorkDirectory = workDirectory;
                        Settings.Default.WorkSpaceName = WorkSpaceData.WorkSpaceName;
                        Settings.Default.Save();
                        Text = string.Format("{0}[{1}]", Settings.Default.EditorTitle, WorkSpaceData.WorkSpaceName);
                        ShowInfo("打开工作区,时间:" + DateTime.Now);

                        //读取行为树类信息
                        NodeClasses = XmlUtility.Read <NodeClasses>(GetNodeClassPath());
                        if (NodeClasses == null)
                        {
                            NodeClasses = new NodeClasses();
                            NodeClasses.ResetNodes();
                            XmlUtility.Save(GetNodeClassPath(), NodeClasses);
                        }

                        NodeClassesStringContent = XmlUtility.ObjectToString(NodeClasses);

                        //读取行为树数据
                        LoadBehaviorTreeData();

                        CreateTreeViewManager();
                    }
                }
            }
        }
        public void LoadBehaviorTreeData()
        {
            //读取行为树数据
            TreeData = XmlUtility.Read <TreeData>(GetBehaviorTreeDataPath());
            if (TreeData == null)
            {
                TreeData = new TreeData();
                XmlUtility.Save(GetBehaviorTreeDataPath(), TreeData);
            }

            BehaviorTreeDataStringContent = XmlUtility.ObjectToString(TreeData);

            if (TreeData.Agents.Count > 0)
            {
                for (int i = 0; i < TreeData.Agents.Count; i++)
                {
                    AgentDesigner agent = TreeData.Agents[i];
                    if (agent != null)
                    {
                        if (agent.Nodes.Count > 0)
                        {
                            for (int ii = 0; ii < agent.Nodes.Count; ii++)
                            {
                                NodeDesigner node = agent.Nodes[ii];
                                if (node.Transitions.Count > 0)
                                {
                                    for (int iii = 0; iii < node.Transitions.Count; iii++)
                                    {
                                        Transition   transition = node.Transitions[iii];
                                        NodeDesigner fromNode   = agent.FindNodeByID(transition.FromNodeID);
                                        NodeDesigner toNode     = agent.FindNodeByID(transition.ToNodeID);
                                        transition.Set(toNode, fromNode);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #4
0
        public void LoadBehaviorTreeData()
        {
            //读取行为树数据
            BehaviorTreeData = XmlUtility.Read <BehaviorTreeDataDesigner>(GetBehaviorTreeDataPath());
            if (BehaviorTreeData == null)
            {
                BehaviorTreeData = new BehaviorTreeDataDesigner();
                XmlUtility.Save(GetBehaviorTreeDataPath(), BehaviorTreeData);
            }

            BehaviorTreeDataStringContent = XmlUtility.ObjectToString(BehaviorTreeData);

            if (BehaviorTreeData.BehaviorTrees.Count > 0)
            {
                for (int i = 0; i < BehaviorTreeData.BehaviorTrees.Count; i++)
                {
                    BehaviorTreeDesigner behaviorTree = BehaviorTreeData.BehaviorTrees[i];
                    if (behaviorTree != null)
                    {
                        if (behaviorTree.Nodes.Count > 0)
                        {
                            for (int ii = 0; ii < behaviorTree.Nodes.Count; ii++)
                            {
                                NodeDesigner node = behaviorTree.Nodes[ii];
                                if (node.Transitions.Count > 0)
                                {
                                    for (int iii = 0; iii < node.Transitions.Count; iii++)
                                    {
                                        Transition   transition = node.Transitions[iii];
                                        NodeDesigner fromNode   = behaviorTree.FindNodeByID(transition.FromNodeID);
                                        NodeDesigner toNode     = behaviorTree.FindNodeByID(transition.ToNodeID);
                                        transition.Set(toNode, fromNode);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        private void enterBTN_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(workSpaceNameTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("请输入工作区名字", "警告");
                return;
            }

            if (string.IsNullOrEmpty(workSpaceDirectoryTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("请选择工作区位置", "警告");
                return;
            }

            if (!Directory.Exists(workSpaceDirectoryTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("工作区目录不存在", "警告");
                return;
            }

            //if (string.IsNullOrEmpty(dataSaveDirectoryTB.Text.Trim()))
            //{
            //    MainForm.Instance.ShowMessage("请选择数据保存位置", "警告");
            //    return;
            //}

            if (!string.IsNullOrEmpty(dataSaveDirectoryTB.Text.Trim()) && !Directory.Exists(dataSaveDirectoryTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("数据保存目录不存在", "警告");
                return;
            }

            string workSpaceDirector = workSpaceDirectoryTB.Text.Trim();

            string[] files = Directory.GetFiles(workSpaceDirector, "*" + Settings.Default.WorkSpaceSetupSuffix);
            if (files.Length > 0)
            {
                string existWorkSpaceName = Path.GetFileName(files[0]);
                //去掉后缀
                existWorkSpaceName = existWorkSpaceName.Replace(Settings.Default.WorkSpaceSetupSuffix, "");
                MainForm.Instance.ShowMessage(string.Format("该位置已被{0}使用,请选择别的目录作为新的工作区位置", existWorkSpaceName), "警告");
                return;
            }

            MainForm.Instance.WorkSpaceData = new WorkSpaceData();
            MainForm.Instance.WorkSpaceData.WorkSpaceName = workSpaceNameTB.Text.Trim();
            MainForm.Instance.WorkSpaceData.Describe      = describeTB.Text.Trim();

            Settings.Default.WorkSpaceName    = workSpaceNameTB.Text.Trim();
            Settings.Default.WorkDirectory    = workSpaceDirectoryTB.Text.Trim();
            Settings.Default.NodeDataSavePath = dataSaveDirectoryTB.Text.Trim();

            Settings.Default.Save();
            XmlUtility.Save <WorkSpaceData>(MainForm.Instance.GetWorkSpacePath(), MainForm.Instance.WorkSpaceData);
            MainForm.Instance.ShowInfo("新建工作区成功,时间:" + DateTime.Now);

            //初始化节点类信息
            MainForm.Instance.NodeClasses = new NodeClasses();
            MainForm.Instance.NodeClasses.ResetNodes();
            XmlUtility.Save(MainForm.Instance.GetNodeClassPath(), MainForm.Instance.NodeClasses);
            MainForm.Instance.NodeClassesStringContent = XmlUtility.ObjectToString(MainForm.Instance.NodeClasses);

            //初始化行为树数据
            MainForm.Instance.TreeData = new TreeData();
            XmlUtility.Save(MainForm.Instance.GetBehaviorTreeDataPath(), MainForm.Instance.TreeData);
            MainForm.Instance.BehaviorTreeDataStringContent = XmlUtility.ObjectToString(MainForm.Instance.TreeData);

            MainForm.Instance.CreateTreeViewManager();

            MainForm.Instance.Exec(OperationType.Refresh);

            this.Close();
        }
Beispiel #6
0
        private void enterBTN_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(workSpaceNameTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("请输入工作区名字", "警告");
                return;
            }

            if (string.IsNullOrEmpty(workSpaceDirectoryTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("请选择工作区位置", "警告");
                return;
            }

            if (!Directory.Exists(workSpaceDirectoryTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("工作区目录不存在", "警告");
                return;
            }

            //if (string.IsNullOrEmpty(dataSaveDirectoryTB.Text.Trim()))
            //{
            //    MainForm.Instance.ShowMessage("请选择数据保存位置", "警告");
            //    return;
            //}

            if (!string.IsNullOrEmpty(dataSaveDirectoryTB.Text.Trim()) && !Directory.Exists(dataSaveDirectoryTB.Text.Trim()))
            {
                MainForm.Instance.ShowMessage("数据保存目录不存在", "警告");
                return;
            }

            if (MainForm.Instance.WorkSpaceData != null)
            {
                MainForm.Instance.WorkSpaceData.WorkSpaceName = workSpaceNameTB.Text.Trim();
                MainForm.Instance.WorkSpaceData.Describe      = describeTB.Text.Trim();

                Settings.Default.WorkSpaceName    = workSpaceNameTB.Text.Trim();
                Settings.Default.WorkDirectory    = workSpaceDirectoryTB.Text.Trim();
                Settings.Default.NodeDataSavePath = dataSaveDirectoryTB.Text.Trim();

                if (m_OldWorkSpaceDirectory != Settings.Default.WorkDirectory || m_OldWorkSpaceName != Settings.Default.WorkSpaceName)
                {
                    //移动工作空间文件
                    string oldWorkSpaceFile = Path.Combine(m_OldWorkSpaceDirectory, m_OldWorkSpaceName + Settings.Default.WorkSpaceSetupSuffix);
                    string newWorkSpaceFile = Path.Combine(Settings.Default.WorkDirectory, Settings.Default.WorkSpaceName + Settings.Default.WorkSpaceSetupSuffix);
                    if (File.Exists(oldWorkSpaceFile))
                    {
                        if (File.Exists(newWorkSpaceFile))
                        {
                            File.Delete(newWorkSpaceFile);
                        }
                        File.Move(oldWorkSpaceFile, newWorkSpaceFile);
                    }

                    //移动节点xml文件
                    string oldXmlDataFile = Path.Combine(m_OldWorkSpaceDirectory, m_OldWorkSpaceName + Settings.Default.BehaviorTreeDataFileSuffix);
                    string newXmlDataFile = MainForm.Instance.GetBehaviorTreeDataPath();
                    if (File.Exists(oldXmlDataFile))
                    {
                        if (File.Exists(newXmlDataFile))
                        {
                            File.Delete(newXmlDataFile);
                        }
                        File.Move(oldXmlDataFile, newXmlDataFile);
                    }

                    //移动NodeTemplate文件
                    string oldNodeTemplateXmlFile = Path.Combine(m_OldWorkSpaceDirectory, Settings.Default.NodeTemplateFile);
                    string newNodeTemplateXmlFile = Path.Combine(Settings.Default.WorkDirectory, Settings.Default.NodeTemplateFile);
                    if (File.Exists(oldNodeTemplateXmlFile))
                    {
                        if (File.Exists(newNodeTemplateXmlFile))
                        {
                            File.Delete(newNodeTemplateXmlFile);
                        }
                        File.Move(oldNodeTemplateXmlFile, newNodeTemplateXmlFile);
                    }
                }

                //移动旧二进制数据
                if (Settings.Default.NodeDataSavePath != m_OldDataSaveDirectory)
                {
                    string oldTreeDataFile = Path.Combine(m_OldDataSaveDirectory, m_OldWorkSpaceName + Settings.Default.NodeDataFileSuffix);
                    string newFile         = MainForm.Instance.GetNodeDataSavePath();
                    if (File.Exists(oldTreeDataFile))
                    {
                        if (File.Exists(newFile))
                        {
                            File.Delete(newFile);
                        }
                        File.Move(oldTreeDataFile, newFile);
                    }
                }

                Settings.Default.Save();
                XmlUtility.Save <WorkSpaceData>(MainForm.Instance.GetWorkSpacePath(), MainForm.Instance.WorkSpaceData);
                MainForm.Instance.Exec(OperationType.Refresh);
                MainForm.Instance.ShowInfo("编辑工作区,时间:" + DateTime.Now);
            }

            this.Close();
        }
        //保存
        public void Save()
        {
            if (WorkSpaceData == null)
            {
                ShowMessage("当前没有工作空间,请新建或者打开工作空间!");
                return;
            }

            if (NodeClasses == null || TreeData == null)
            {
                return;
            }

            //节点类移除未定义的枚举字段
            NodeClasses.RemoveUnDefineEnumField();

            //移除未定义的节点
            TreeData.RemoveUnDefineNode();

            //修正数据,和模板的保持一致
            TreeData.AjustData();

            //检验枚举
            VerifyInfo verifyEnum = NodeClasses.VerifyEnum();

            if (verifyEnum.HasError)
            {
                ShowMessage(verifyEnum.Msg);
                ShowInfo(verifyEnum.Msg);
                return;
            }

            //检验节点类
            VerifyInfo verifyNodeClass = NodeClasses.VerifyNodeClass();

            if (verifyNodeClass.HasError)
            {
                ShowMessage(verifyNodeClass.Msg);
                ShowInfo(verifyNodeClass.Msg);
                return;
            }

            //校验行为树
            VerifyInfo verifyBehaviorTree = TreeData.VerifyBehaviorTree();

            if (verifyBehaviorTree.HasError)
            {
                ShowMessage(verifyBehaviorTree.Msg);
                ShowInfo(verifyBehaviorTree.Msg);
                return;
            }

            if (XmlUtility.Save(GetNodeClassPath(), NodeClasses))
            {
                NodeClassesStringContent = XmlUtility.ObjectToString(NodeClasses);
            }


            if (XmlUtility.Save(GetBehaviorTreeDataPath(), TreeData))
            {
                BehaviorTreeDataStringContent = XmlUtility.ObjectToString(TreeData);
            }

            //序列化成二进制
            BehaviorTreeData.TreeData treeData = EditorUtility.CreateTreeData(TreeData);
            if (treeData != null)
            {
                string savePath = GetNodeDataSavePath();
                if (File.Exists(savePath))
                {
                    File.Delete(savePath);
                }
                BehaviorTreeData.Serializer.SerializeToFile(treeData, savePath);
            }

            ShowInfo("保存成功 时间:" + DateTime.Now);
        }