You've already forked taptap2024_GJ_chidouren
init
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Framework.Asset;
|
||||
using Framework.Utils.SingletonTemplate;
|
||||
using UnityEngine;
|
||||
using Debug = UnityEngine.Debug;
|
||||
|
||||
|
||||
public interface IRofBase
|
||||
{
|
||||
int ReadBody(byte[] rData, int nOffset);
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||
public class ROFPathAttribute : System.Attribute
|
||||
{
|
||||
public string TxtName;
|
||||
|
||||
public ROFPathAttribute(string rTxtName)
|
||||
{
|
||||
this.TxtName = rTxtName;
|
||||
}
|
||||
}
|
||||
|
||||
public class RofTable<T> where T : IRofBase, new()
|
||||
{
|
||||
private int mColNum;
|
||||
private int mRowNum;
|
||||
|
||||
private Dictionary<int, T> mIDMap;
|
||||
private Dictionary<int, int> mRowMap;
|
||||
|
||||
public int RowNum
|
||||
{
|
||||
get { return mRowNum; }
|
||||
}
|
||||
|
||||
public int ColNum
|
||||
{
|
||||
get { return mColNum; }
|
||||
}
|
||||
|
||||
public RofTable(byte[] rTotalBuffer)
|
||||
{
|
||||
mIDMap = new Dictionary<int, T>();
|
||||
mRowMap = new Dictionary<int, int>();
|
||||
|
||||
int nOffset = 64;
|
||||
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
Array.Reverse(rTotalBuffer, nOffset, 4);
|
||||
}
|
||||
|
||||
mRowNum = (int)BitConverter.ToUInt32(rTotalBuffer, nOffset);
|
||||
nOffset += 4;
|
||||
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
Array.Reverse(rTotalBuffer, nOffset, 4);
|
||||
}
|
||||
|
||||
mColNum = (int)BitConverter.ToUInt32(rTotalBuffer, nOffset);
|
||||
nOffset += 4;
|
||||
|
||||
//解析头
|
||||
for (int i = 0; i < mColNum; i++)
|
||||
{
|
||||
int nNameLen = (int)rTotalBuffer[nOffset];
|
||||
nOffset += 1 + nNameLen + 2;
|
||||
}
|
||||
|
||||
//解析行
|
||||
for (int i = 0; i < mRowNum; i++)
|
||||
{
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
Array.Reverse(rTotalBuffer, nOffset, 4);
|
||||
}
|
||||
|
||||
int nID = (int)BitConverter.ToUInt32(rTotalBuffer, nOffset);
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
Array.Reverse(rTotalBuffer, nOffset, 4);
|
||||
}
|
||||
|
||||
T rModel = new T();
|
||||
nOffset = rModel.ReadBody(rTotalBuffer, nOffset);
|
||||
mIDMap.Add(nID, rModel);
|
||||
mRowMap.Add(i, nID);
|
||||
}
|
||||
}
|
||||
|
||||
public T GetDataByID(int nID)
|
||||
{
|
||||
if (mIDMap.ContainsKey(nID) == false)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
|
||||
return mIDMap[nID];
|
||||
}
|
||||
|
||||
public List<T> GetAllRow()
|
||||
{
|
||||
return new List<T>(this.mIDMap.Values);
|
||||
}
|
||||
|
||||
public List<int> GetAllIds()
|
||||
{
|
||||
return new List<int>(this.mIDMap.Keys);
|
||||
}
|
||||
|
||||
public T GetDataByRow(int nIndex)
|
||||
{
|
||||
if (mRowMap.ContainsKey(nIndex) == false)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
|
||||
int nID = mRowMap[nIndex];
|
||||
return mIDMap[nID];
|
||||
}
|
||||
}
|
||||
|
||||
namespace Framework.common
|
||||
{
|
||||
public partial class RofUtils
|
||||
{
|
||||
//加配置表往下写
|
||||
//Example:
|
||||
//[ROFPath("RofLanguage")]
|
||||
//public RofTable<RofLanguageRow> RofLanguageTable { get; private set; }
|
||||
|
||||
public static string ConfigPath = "Config/Rof";
|
||||
|
||||
public static void SetConfigPath(string path)
|
||||
{
|
||||
ConfigPath = path;
|
||||
}
|
||||
|
||||
public static void SetRofValue(Type rType , object target)
|
||||
{
|
||||
// Type rType = this.GetType();
|
||||
var rBindingFlags = BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.Public |
|
||||
BindingFlags.NonPublic | BindingFlags.Instance;
|
||||
var rProInfos = rType.GetProperties(rBindingFlags);
|
||||
if (rProInfos == null || rProInfos.Length == 0) return;
|
||||
//Debug.LogError(rProInfos.Length);
|
||||
var rProInfoEnum = rProInfos.GetEnumerator();
|
||||
while (rProInfoEnum.MoveNext())
|
||||
{
|
||||
var mPinfo = rProInfoEnum.Current as PropertyInfo;
|
||||
var rAttrObjs = mPinfo.GetCustomAttributes(typeof(ROFPathAttribute), false);
|
||||
if (rAttrObjs == null || rAttrObjs.Length == 0) continue;
|
||||
var rConfigPathAttr = rAttrObjs[0] as ROFPathAttribute;
|
||||
if (rConfigPathAttr == null) continue;
|
||||
var rRofTxtName = rConfigPathAttr.TxtName + ".bytes";
|
||||
var rTxtPath = string.Format("{0}/{1}", ConfigPath, rRofTxtName);
|
||||
var request = AssetManager.Instance.LoadAssetRequest<TextAsset>(rTxtPath);
|
||||
var rTxtAsset = request.GetAssetObject<TextAsset> ();
|
||||
// Debug.Log("加载配置数据: " + rRofTxtName + rTxtAsset.GetType());
|
||||
var rFiledObj = Construct(mPinfo.PropertyType, new Type[] { typeof(byte[]) }, rTxtAsset.bytes);
|
||||
if (rFiledObj != null)
|
||||
{
|
||||
mPinfo.SetValue(target, rFiledObj);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError(rRofTxtName + "文件有错误");
|
||||
}
|
||||
|
||||
request.Release();
|
||||
AssetManager.Instance.UnLoadAsset (rTxtPath);
|
||||
}
|
||||
}
|
||||
|
||||
private static BindingFlags mFlagsAll = BindingFlags.Instance | BindingFlags.SetField | BindingFlags.GetField |
|
||||
BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.Public |
|
||||
BindingFlags.NonPublic;
|
||||
|
||||
private static object Construct(Type rType, Type[] rTypes, params object[] rParams)
|
||||
{
|
||||
var rConstructorInfo = rType.GetConstructor(mFlagsAll, null, rTypes, null);
|
||||
return rConstructorInfo.Invoke(rParams);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 48c9d20cea6f3d1469a8a7345fa77d53
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user