int WriteStringArray2(object value, DataBuffer db, int dataType) { //List<List<String>> //List<String[]> //String[][] var list = value as IList; if (list != null) { int c = list.Count; if (c > 0) { Int16[] addr = new short[c]; for (int i = 0; i < c; i++) { var obj = list[i]; string[] tmp = obj as string[]; if (tmp == null) { List <string> lt = obj as List <string>; if (lt != null) { tmp = lt.ToArray(); } } if (tmp != null) { addr[i] = (Int16)db.AddData(new FakeStringArray(tmp), DataType.FakeStringArray); } } return(db.AddData(addr, DataType.Int16Array)); } } return(0); }
/// <summary> /// 可在返回数据中添加附加信息,预留字段为FakeStruct[4] /// </summary> /// <typeparam name="T"></typeparam> /// <param name="instance"></param> /// <param name="info"></param> /// <returns></returns> public DataBuffer Write <T>(object instance, DataInfo info) { #if ENABLE_IL2CPP UnityEngine.Debug.LogError("IL2CPP Not supported"); return(null); #endif if (instance == null) { return(null); } if (info == null) { if (dataInfo == null) { dataInfo = new DataInfo(); dataInfo.Analysis(instance.GetType()); } } else { dataInfo = info; } types = dataInfo.dataTypes; DataBuffer db = new DataBuffer(); FakeStruct fa = new FakeStruct(db, 5);//预留一个字段,用于扩展信息 string str = instance.ToString(); fa[0] = db.AddData(str, DataType.String); fa[1] = WriteObject(str, instance, db); fa[2] = db.AddData(dataInfo.WriteTables(db), DataType.FakeStructArray); fa[3] = DerivedData ? 1 : 0; db.fakeStruct = fa; objList.Clear(); return(db); }
int WriteArray2 <T>(object value, DataBuffer db, int dataType) { //List<List<T>> //List<T[]> //T[][] var list = value as IList; if (list != null) { int c = list.Count; if (c > 0) { Int16[] addr = new short[c]; for (int i = 0; i < c; i++) { var obj = list[i]; T[] tmp = obj as T[]; if (tmp == null) { List <T> lt = obj as List <T>; if (lt != null) { tmp = lt.ToArray(); } } if (tmp != null) { addr[i] = (Int16)db.AddData(tmp, dataType); } } return(db.AddData(addr, DataType.Int16Array)); } } return(0); }
/// <summary> /// 可在返回数据中添加附加信息,预留字段为FakeStruct[4] /// </summary> /// <typeparam name="T"></typeparam> /// <param name="instance"></param> /// <param name="info"></param> /// <returns></returns> public DataBuffer Write <T>(object instance, DataInfo info) { if (info == null) { if (dataInfo == null) { dataInfo = new DataInfo(); dataInfo.Analysis(instance.GetType()); } } else { dataInfo = info; } types = dataInfo.dataTypes; DataBuffer db = new DataBuffer(); FakeStruct fa = new FakeStruct(db, 5);//预留一个字段,用于扩展信息 string str = instance.ToString(); fa[0] = db.AddData(str, DataType.String); fa[1] = WriteObject(str, instance, db); fa[2] = db.AddData(dataInfo.WriteTables(db), DataType.FakeStructArray); fa[3] = DerivedData ? 1 : 0; db.fakeStruct = fa; objList.Clear(); return(db); }
/// <summary> /// 设置一个数据对象,数据类型必须为DataType中任意一种 /// </summary> /// <param name="index">元素索引</param> /// <param name="offset">子元素偏移</param> /// <param name="dat">数据对象</param> public unsafe void SetData(int index, int offset, object dat) { int o = (index * m_size + offset) * 4; Int32 *a = (Int32 *)(ip + o); buffer.RemoveData(*a); *a = buffer.AddData(dat); }
int WriteStructList(object value, DataBuffer db, DataTypeInfo info) { var list = value as IList; if (list != null) { if (list.Count > 0) { int el = info.ElementLength; int dl = info.DataLength; IntPtr ptr = UnsafeOperation.GetObjectAddr(list); ptr = UnsafeOperation.GetListElement(ptr, 0); FakeStructArray fsa = new FakeStructArray(db, el, list.Count); unsafe { FakeStruct fs = new FakeStruct(db, el, fsa.ip); for (int i = 0; i < list.Count; i++) { fs.SetPoint(fsa[i]); WriteStruct(info, ptr, fs); ptr += dl; } } return(db.AddData(fsa, DataType.FakeStructArray)); } } return(0); }
public unsafe void SetData(int index, object dat) { if (index < 0) { return; } if (index >= element) { return; } int o = index * 4; Int32 *a = (Int32 *)(ip + o); buffer.RemoveData(*a); *a = buffer.AddData(dat); }
int WriteClassArray(object value, DataBuffer db, DataTypeInfo info) { var list = value as IList; if (list != null) { if (list.Count > 0) { if (HaveDerived) { Int32[] aar = new Int32[list.Count]; for (int i = 0; i < list.Count; i++) { var obj = list[i]; if (obj != null) { string fullName = obj.ToString(); if (fullName == info.fullName) { aar[i] = WriteObject(info, obj, db); } else { var dt = dataInfo.FindTypeInfo2(fullName); if (dt != null) { aar[i] = WriteObject(dt, obj, db); } } } } return(db.AddData(aar, DataType.Int32Array)); } else { Int16[] aar = new Int16[list.Count]; for (int i = 0; i < list.Count; i++) { aar[i] = (Int16)WriteObject(info, list[i], db); } return(db.AddData(aar, DataType.Int16Array)); } } } return(0); }
public unsafe void SetData(int index, object dat) { int o = index * 4; Int32 *a = (Int32 *)(ip + o); buffer.RemoveData(*a); *a = buffer.AddData(dat); }
/// <summary> /// 写入类的数据 /// </summary> /// <param name="typeIndex"></param> /// <param name="instance"></param> /// <param name="db"></param> /// <returns></returns> int WriteObject(DataTypeInfo dt, object instance, DataBuffer db) { if (instance == null) { return(0); } for (int i = 0; i < objList.Count; i++) { if (objList[i].instance == instance) { return(objList[i].index); } } int typeIndex = dt.typeIndex; if (HaveDerived) { string fullName = instance.ToString(); if (fullName != dt.fullName) { dt = dataInfo.FindTypeInfo2(fullName); } if (dt == null) { return(0); } else { DerivedData = true; typeIndex = dt.typeIndex; } } FakeStruct fake = new FakeStruct(db, types[typeIndex].ElementLength); int r = db.AddData(fake, DataType.FakeStruct); ClassContext cc = new ClassContext(); cc.instance = instance; cc.index = typeIndex << 16 | r; objList.Add(cc); var dts = dt.dataFeilds; IntPtr ptr = UnsafeOperation.GetObjectAddr(instance); for (int i = 0; i < dts.Count; i++) { WriteField(fake, 0, dts[i], ptr); } return(cc.index); }
public override unsafe FakeStruct LoadFromObject(Component com, DataBuffer buffer) { var trans = com as Transform; if (trans == null) { return(null); } FakeStruct fake = new FakeStruct(buffer, TransfromData.ElementSize); TransfromData *td = (TransfromData *)fake.ip; td->localEulerAngles = trans.localEulerAngles; td->localPosition = trans.localPosition; td->localScale = trans.localScale; td->name = buffer.AddData(trans.name); td->tag = buffer.AddData(trans.tag); var coms = com.GetComponents <Component>(); td->type = gameobjectBuffer.GetTypeID(coms); List <Int16> tmp = new List <short>(); for (int i = 0; i < coms.Length; i++) { if (!(coms[i] is Transform)) { Int32 type = gameobjectBuffer.GetTypeIndex(coms[i]); var loader = gameobjectBuffer.GetDataLoader(type); if (loader != null) { var fs = loader.LoadFromObject(coms[i], buffer); tmp.Add((Int16)buffer.AddData(fs)); } else { tmp.Add(0); } tmp.Add((Int16)type); } } td->coms = buffer.AddData(tmp.ToArray()); int c = trans.childCount; if (c > 0) { Int16[] buf = new short[c]; for (int i = 0; i < c; i++) { var fs = LoadFromObject(trans.GetChild(i), buffer); buf[i] = (Int16)buffer.AddData(fs); } td->child = buffer.AddData(buf); } return(fake); }
unsafe FakeStructArray SaveSprites(DataBuffer buffer, List <Sprite> sprites) { FakeStructArray array = new FakeStructArray(buffer, SpriteDataS.ElementSize, sprites.Count); float tx = sprites[0].texture.width; float ty = sprites[0].texture.height; for (int i = 0; i < sprites.Count; i++) { var sprite = sprites[i]; string name = sprite.name; SpriteDataS *sp = (SpriteDataS *)array[i]; sp->name = buffer.AddData(name); sp->txtSize.x = tx; sp->txtSize.y = ty; sp->rect = sprite.rect; sp->pivot = sprite.pivot; } return(array); }
int WriteClassArray2(object value, DataBuffer db, DataFieldInfo info) { var list = value as IList; if (list != null) { int c = list.Count; if (c > 0) { Int16[] addr = new short[c]; for (int i = 0; i < c; i++) { var obj = list[i]; if (obj != null) { addr[i] = (Int16)WriteClassArray(obj, db, info.typeInfo); } } return(db.AddData(addr, DataType.Int16Array)); } } return(0); }
unsafe FakeStructArray SaveSprites(DataBuffer buffer, List <Sprite> sprites) { FakeStructArray array = new FakeStructArray(buffer, SpriteDataS.ElementSize, sprites.Count); float tx = sprites[0].texture.width; float ty = sprites[0].texture.height; for (int i = 0; i < sprites.Count; i++) { var sprite = sprites[i]; string name = sprite.name; SpriteDataS *sp = (SpriteDataS *)array[i]; sp->name = buffer.AddData(name); sp->txtSize.x = tx; sp->txtSize.y = ty; var sr = sp->rect = sprite.rect; sp->pivot = sprite.pivot; float w = sprite.texture.width; float h = sprite.texture.width; float x = sr.x; float rx = sr.width + x; float y = sr.y; ty = sr.height + y; x /= w; rx /= w; y /= h; ty /= h; sp->uv0.x = x; sp->uv0.y = y; sp->uv1.x = x; sp->uv1.y = ty; sp->uv2.x = rx; sp->uv2.y = ty; sp->uv3.x = rx; sp->uv3.y = y; } return(array); }
int WriteStructArray(object value, DataBuffer db, DataTypeInfo info) { var list = value as IList; if (list != null) { if (list.Count > 0) { int el = info.ElementLength; FakeStructArray fsa = new FakeStructArray(db, el, list.Count); unsafe { FakeStruct fs = new FakeStruct(db, el, fsa.ip); for (int i = 0; i < list.Count; i++) { fs.SetPoint(fsa[i]); WriteStruct(info, list[i], fs); } } return(db.AddData(fsa, DataType.FakeStructArray)); } } return(0); }