using System; using System.Collections.Generic; using System.Text; using UnityEngine; namespace TEngine { /// /// 过滤配置 /// /// /// /// public delegate bool FilterResBin(TType val); /// /// 计算拼接Key /// /// /// /// /// public delegate KeyType ConvertDictionaryKey(TType val); public class ResConfigUtil { private static StringBuilder m_strBuilder = new StringBuilder(); private static readonly string m_split = "_"; #region 读取接口 public static List ReadConfigListRes(string fileName = "") { if (string.IsNullOrEmpty(fileName)) { fileName = typeof(T).Name; } string resPath = string.Format("Config/{0}.json",fileName); TextAsset jsonStr = TResources.Load(resPath); if (jsonStr == null) { TLogger.LogError("读取Json配置数据失败:{0}", fileName); return null; } List list = new List(); var jsonData = JsonHelper.Instance.Deserialize>(jsonStr.text); list = jsonData; return list; } public static Dictionary ReadConfigRes(string fileName = "") { if (string.IsNullOrEmpty(fileName)) { fileName = typeof(T).Name; } string resPath = string.Format("Config/{0}.json", fileName); TextAsset jsonStr = TResources.Load(resPath); if (jsonStr == null) { TLogger.LogError("读取Json配置数据失败:{0}", fileName); return null; } Dictionary dic = new Dictionary(); var jsonData = JsonHelper.Instance.Deserialize>(jsonStr.text); dic = jsonData; return dic; } public static Dictionary ReadConfigResIntKey(string fileName = "") { if (string.IsNullOrEmpty(fileName)) { fileName = typeof(T).Name; } string resPath = string.Format("Config/{0}.json", fileName); TextAsset jsonStr = TResources.Load(resPath); if (jsonStr == null) { TLogger.LogError("读取Json配置数据失败:{0}", fileName); return null; } Dictionary dic = new Dictionary(); var jsonData = JsonHelper.Instance.Deserialize>(jsonStr.text); dic = jsonData; return dic; } public static List ReadResBinDict(Dictionary dic,ConvertDictionaryKey convKey ,string fileName = "") { if (string.IsNullOrEmpty(fileName)) { fileName = typeof(T).Name; } string resPath = string.Format("Config/{0}.json", fileName); TextAsset jsonStr = TResources.Load(resPath); if (jsonStr == null) { TLogger.LogError("读取Json配置数据失败:{0}", fileName); return null; } var jsonData = JsonHelper.Instance.Deserialize>(jsonStr.text); var etr = jsonData.GetEnumerator(); if(dic == null) { dic = new Dictionary(); } while (etr.MoveNext()) { var key = convKey(etr.Current); { if (dic.ContainsKey(key)) { TLogger.LogError("Config {0} Load Error, Repeat config {1}",typeof(T).ToString(),key.ToString()); } dic.Add(key, etr.Current); } } return jsonData; } #endregion public static UInt64 Make64Key(uint key1, uint key2) { return (((UInt64)key1) << 32) | key2; } public static string MakeStringKey(uint key1, uint key2, uint key3) { m_strBuilder.Length = 0; m_strBuilder.Append(key1); m_strBuilder.Append(m_split); m_strBuilder.Append(key2); m_strBuilder.Append(m_split); m_strBuilder.Append(key3); return m_strBuilder.ToString(); } public static string MakeStringKey(string key1, uint key2) { m_strBuilder.Length = 0; m_strBuilder.Append(key1); m_strBuilder.Append(m_split); m_strBuilder.Append(key2); return m_strBuilder.ToString(); } public static string MakeStringKey(string key1, string key2) { m_strBuilder.Length = 0; m_strBuilder.Append(key1); m_strBuilder.Append(m_split); m_strBuilder.Append(key2); return m_strBuilder.ToString(); } } } /* * ===》 example 《=== public class BufferMgr : Singleton { private Dictionary m_dictBaseConfig = new Dictionary(); public BufferMgr() { m_dictBaseConfig = ResConfigUtil.ReadConfigRes("BuffConfig"); } public Dictionary GetBuffConfig() { return m_dictBaseConfig; } } * */