Files
JJBB/Assets/Project/Script/Common/Utilities/Editor/EditorTableManager.cs
2024-08-23 15:49:34 +08:00

151 lines
5.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Module.Log;
using UnityEngine;
// 编辑器用表格读取工具用于避开修改自动生成的TableManager类来读取编辑器表格的功能
public static class EditorTableManager
{
public static List<T> GetTable<T>() where T : class
{
// 不缓存表格,可能有动态改表的情况
object tableList = null;
const string fileNameField = "TAB_FILE_DATA";
var fileNameGetInfo = typeof(T).GetField("TAB_FILE_DATA",
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
if (fileNameGetInfo == null)
{
LogModule.ErrorLog(string.Format("类型{0}不存在表格路径{1}", typeof(T), fileNameField));
}
else
{
var fileName = (string) fileNameGetInfo.GetValue(null);
fileName = Path.GetFileName(fileName);
tableList = LoadTable<T>(fileName);
}
return tableList as List<T>;
}
private static List<T> LoadTable<T>(string tableName) where T : class
{
var filePath = GetTablePath(tableName);
if (!File.Exists(filePath))
{
LogModule.ErrorLog(string.Format("文件{0}不存在!", filePath));
}
else
{
ConstructorInfo constructor = null;
var ctors = typeof(T).GetConstructors();
for (var i = 0; i < ctors.Length; i++)
{
var parameters = ctors[i].GetParameters();
if (parameters.Length == 1
&& parameters[0].ParameterType == typeof(string))
{
constructor = ctors[i];
break;
}
}
if (constructor == null)
{
LogModule.ErrorLog(string.Format("类型{0}不存在表格形式的构造函数!", typeof(T)));
}
else
{
var list = new List<T>();
var lines = File.ReadAllLines(filePath);
for (var i = 2; i < lines.Length; i++)
{
var line = lines[i];
if (!string.IsNullOrEmpty(line) && !line[0].Equals('#') && !line[0].Equals('\t'))
{
var item = (T) constructor.Invoke(new object[] {line});
list.Add(item);
}
}
return list;
}
}
return null;
}
private static string GetTablePath(string tableName)
{
if (!Path.HasExtension(tableName))
tableName += AssetConst.textExtension;
return EditorCommonUtility.AssetToFilePath(LoadAssetBundle.tablePath) + tableName;
}
//private static void ReaderPList(string text, SerializableTable _fun, Dictionary<int, List<object>> _hash)
//{
// var alldataRow = text.Split('\n');
// int skip = 0;
// string[] typeList = null;
// foreach (string line in alldataRow)
// {
// int nKey;
// if (skip == 1)
// {
// typeList = line.Split('\t');
// _values = new string[typeList.Length];
// ++skip;
// continue;
// }
// if (++skip < 4) continue;
// if (string.IsNullOrEmpty(line)) continue;
// if (line[0] == '#') continue;
// string szlinetemp = line;
// if (szlinetemp.Length >= 1)
// {
// if (szlinetemp[szlinetemp.Length - 1] == '\r')
// {
// szlinetemp = szlinetemp.TrimEnd('\r');
// }
// }
// string[] strCol = MySplit(szlinetemp, typeList, "\t");
// if (strCol.Length == 0) continue;
// string skey = strCol[0];
// string[] valuesList = new string[strCol.Length];
// if (string.IsNullOrEmpty(skey) || skey.Equals("--"))
// {
// skey = _key;
// nKey = Int32.Parse(skey);
// valuesList[0] = skey;
// for (int i = 1; i < strCol.Length; ++i)
// {
// if (String.IsNullOrEmpty(strCol[i]) || strCol[i] == "--")
// {
// valuesList[i] = _values[i];
// }
// else
// {
// valuesList[i] = strCol[i];
// _values[i] = strCol[i];
// }
// }
// }
// else
// {
// _key = skey;
// nKey = Int32.Parse(skey);
// for (int i = 0; i < strCol.Length; ++i)
// {
// if (strCol[i] == "--")
// {
// valuesList[i] = "0";
// _values[i] = "0";
// }
// else
// {
// valuesList[i] = strCol[i];
// _values[i] = strCol[i];
// }
// }
// }
// _fun(valuesList, nKey, _hash);
// }
//}
}