using System.Collections.Generic; using UnityEngine; using Cysharp.Threading.Tasks; using System.IO; using System; public class ConfigBase where T : ConfigBase, new() { public static Dictionary dic = new Dictionary(); public static bool isInit = false; public static T Get(U id) { if (!isInit) { Debug.LogError("ConfigBase 没有初始化"); return null; // 或者抛出异常,视情况而定 } if (dic.ContainsKey(id)) { return dic[id]; } return null; } public static void ForceInit() { ConfigManager.Instance.LoadConfigByType(typeof(T)); } public List GetValues() { if (!isInit) { Debug.LogError(typeof(T).Name + " 没有初始化 GetValues"); return null; // 或者抛出异常,视情况而定 } List result = new List(); result.AddRange(dic.Values); return result; } public static bool HasKey(U key) { if (!isInit) { Debug.LogError(typeof(T).Name + " 没有初始化 HasKey"); return false; // 或者抛出异常,视情况而定 } return dic.ContainsKey(key); } public static void Init(string[] lines) { dic.Clear(); for (int i = 3; i < lines.Length; i++) { string line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } string strKey = line.Substring(0, index); T config = new T(); U key = config.LoadKey(strKey); config.LoadConfig(line); #if UNITY_EDITOR try { #endif dic.Add(key, config); #if UNITY_EDITOR } catch (ArgumentException exception) { Debug.LogError(typeof(T).Name + " 重复的key " + key + " " + exception.Message); } #endif } isInit = true; } public virtual U LoadKey(string line) { return default(U); } public virtual void LoadConfig(string line) { } protected int ParseInt(string str) { int result = 0; int.TryParse(str, out result); return result; } protected float ParseFloat(string str) { float result = 0f; float.TryParse(str, out result); return result; } protected string[] Split(string str, char split) { return str.Split(split); } protected List ParseStrList(string str, char split) { List result = new List(); string[] strs = Split(str, split); for (int i = 0; i < strs.Length; i++) { result.Add(strs[i]); } return result; } protected List ParseIntList(string str, char split) { List result = new List(); string[] strs = Split(str, split); for (int i = 0; i < strs.Length; i++) { result.Add(ParseInt(strs[i])); } return result; } protected U GetKey(string key) { if (typeof(U) == typeof(string)) { return (U)(object)key; } else if (typeof(U) == typeof(int)) { return (U)(object)ParseInt(key); } else { Debug.LogError("GetKey 意外的key类型 类型错误 " + typeof(U).Name); return default(U); } } }