Esempio n. 1
0
        public static BTData.BehaviorTreeData CreateBehaviorTreeData(BehaviorTreeDesigner behaviorTree)
        {
            BTData.BehaviorTreeData data = new BTData.BehaviorTreeData();
            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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        //保存
        public void Save()
        {
            if (WorkSpaceData == null)
            {
                ShowMessage("当前没有工作空间,请新建或者打开工作空间!");
                return;
            }

            if (NodeTemplate == null || BehaviorTreeData == null)
            {
                return;
            }

            //移除未定义的枚举字段
            NodeTemplate.RemoveUnDefineEnumField();

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

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

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

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

            //检验节点类
            VerifyInfo verifyNodeTemplate = NodeTemplate.VerifyNodeTemplate();

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

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

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

            if (XmlUtility.Save(GetNodeTemplatePath(), NodeTemplate))
            {
                NodeTemplateStringContent = XmlUtility.ObjectToString(NodeTemplate);
            }


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

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

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