using System.Collections.Generic; using System.IO; using Data; using Utils; namespace Managers { public class DefineManager : Singleton { private const string coreNamespace = "Data"; private static readonly string[] dataSetFilePath = { "Data", "Mod" }; public Dictionary> defines = new(); public Dictionary packs = new(); /// /// 初始化定义管理器,加载所有定义包并构建定义字典。 /// /// /// 该方法执行以下操作: /// 1. 获取指定路径下的所有子文件夹,每个子文件夹代表一个定义包。 /// 2. 遍历每个定义包,尝试加载其中的定义数据。 /// 3. 将加载的定义数据按类型分类,并存储到定义字典中。 /// public void Init() { var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath)); foreach (var folder in packFolder) { var pack = new DefinePack(); if (pack.LoadPack(folder)) packs.Add(pack.packID, pack); } foreach (var pack in packs) { foreach (var define in pack.Value.defines) { var typeName=define.Key; var defList=define.Value; if (!defines.ContainsKey(typeName)) defines[typeName] = new Dictionary(); foreach (var def in defList) { defines[typeName][def.defName] = def; } } } } /// /// 查找指定定义类型的定义名对应的 Define 对象。 /// /// 定义类型 /// 定义名 /// 如果找到,返回 Define 对象;否则返回 null。 public Define FindDefine(string defineType, string defineName) { if (defines.TryGetValue(defineType, out var typeDict)) { if (typeDict.TryGetValue(defineName, out var define)) { return define; } } return null; } public override string ToString() { if (packs == null || packs.Count == 0) { return "No packs available"; // 如果集合为空或为 null,返回默认信息 } var result = new System.Text.StringBuilder(); foreach (var definePack in packs) { result.AppendLine(definePack.ToString()); // 每个元素占一行 } return result.ToString(); } } }