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); } } }
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); }
/// <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); }