public void Update(string filePath)
        {
            DirectoryInfo dInfo = new DirectoryInfo(filePath);

            FileInfo[] fileInfoArr = dInfo.GetFiles("*.bytes", SearchOption.TopDirectoryOnly);
            for (int i = 0; i < fileInfoArr.Length; ++i)
            {
                string            fullName  = fileInfoArr[i].FullName;
                BehaviorReadWrite readWrite = new BehaviorReadWrite();
                BehaviorTreeData  treeData  = readWrite.ReadJson(fullName);

                treeData = DataNodeIdStandardTool.StandardID(treeData);
                CheckCircle(treeData, treeData.rootNodeId);

                treeData = UpdateData(treeData);
                string fileName = System.IO.Path.GetFileNameWithoutExtension(fullName);

                fileName = string.Format("{0}.bytes", fileName);
                string jsonFilePath = CommonUtils.FileUtils.CombinePath(filePath, "Json", fileName);
                bool   value        = readWrite.WriteJson(treeData, jsonFilePath);
                if (!value)
                {
                    Debug.LogError("WriteError:" + jsonFilePath);
                }
            }
        }
Esempio n. 2
0
        public void SaveFile(string fileName, BehaviorTreeData data)
        {
            if (data == null)
            {
                UnityEngine.Debug.LogError("rootNode is null");
                return;
            }

            if (string.IsNullOrEmpty(fileName))
            {
                if (EditorUtility.DisplayDialog("警告", "文件名不能为空", "确定"))
                {
                    return;
                }
            }

            if (fileName.Length > 30)
            {
                if (EditorUtility.DisplayDialog("警告", "文件名过长,不能大于20个字符", "确定"))
                {
                    return;
                }
            }

            string path = BehaviorDataController.Instance.GetFilePath(fileName);

            if (File.Exists(path))
            {
                if (!EditorUtility.DisplayDialog("已存在文件", "是否替换新文件", "替换", "取消"))
                {
                    return;
                }
            }

            // 如果项目总不包含该路径,创建一个
            string directory = Path.GetDirectoryName(path);

            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            data.nodeDic.Clear();

            data          = DataNodeIdStandardTool.StandardID(data);
            data.fileName = fileName;

            BehaviorReadWrite readWrite = new BehaviorReadWrite();

            readWrite.WriteJson(data, path);
        }
        public void SaveSubTree(string subTreeConfigName, int subTreeNodeId)
        {
            UnityEngine.Debug.LogError("SaveSubTree:" + subTreeConfigName + "     " + subTreeNodeId);

            NodeValue subTreeNode = BehaviorDataController.Instance.GetNode(subTreeNodeId);

            if (null == subTreeNode || subTreeNode.NodeType != (int)NODE_TYPE.SUB_TREE)
            {
                return;
            }
            if (subTreeNode.subTreeType != (int)SUB_TREE_TYPE.NORMAL)
            {
                return;
            }

            BehaviorTreeData subTreeData = new BehaviorTreeData();

            subTreeData.fileName = subTreeConfigName;

            List <NodeValue> nodeList = BehaviorDataController.Instance.FindChild(BehaviorDataController.Instance.BehaviorTreeData, subTreeNodeId);

            List <NodeValue> newNodeList = new List <NodeValue>();

            for (int i = 0; i < nodeList.Count; ++i)
            {
                NodeValue childNode    = nodeList[i];
                NodeValue newNodeValue = childNode.Clone();

                if (newNodeValue.subTreeEntry)
                {
                    newNodeValue.isRootNode   = true;
                    newNodeValue.parentNodeID = -1;
                    subTreeData.rootNodeId    = newNodeValue.id;
                }
                newNodeValue.parentSubTreeNodeId = -1;

                subTreeData.nodeList.Add(newNodeValue);
            }

            for (int i = 0; i < BehaviorDataController.Instance.BehaviorTreeData.parameterList.Count; ++i)
            {
                NodeParameter parameter = BehaviorDataController.Instance.BehaviorTreeData.parameterList[i];
                subTreeData.parameterList.Add(parameter.Clone());
            }

            subTreeData = DataNodeIdStandardTool.StandardID(subTreeData);

            ConfigFileSave configFileSave = new ConfigFileSave();

            configFileSave.SaveFile(subTreeConfigName, subTreeData);
        }
Esempio n. 4
0
        /// <summary>
        /// NodeId 规则:文件名所有字符的 Assic码相加 * 10000 + 0 - N
        /// 如名字 abc,则第2个ID 为 ((int)a + (int)b + (int)c) * 1000 + 2 = (61 + 62 + 63) * 1000 + 2 = 1860002
        /// </summary>
        /// <returns></returns>
        private int GetNewNodeId()
        {
            int id    = -1;
            int index = -1;

            while (id == -1)
            {
                ++index;
                id = index;
                List <NodeValue> NodeList = BehaviorDataController.Instance.NodeList;
                for (int i = 0; i < NodeList.Count; ++i)
                {
                    int value = NodeList[i].id % 10000;
                    if (value == index)
                    {
                        id = -1;
                    }
                }
            }

            id = DataNodeIdStandardTool.IdTransition(BehaviorDataController.Instance.FileName, id);
            return(id);
        }