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