Exemple #1
0
        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);
        }
Exemple #2
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);
        }
Exemple #3
0
        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);
        }
Exemple #4
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);
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        /// <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);
        }
Exemple #12
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;
                sp->rect      = sprite.rect;
                sp->pivot     = sprite.pivot;
            }
            return(array);
        }
Exemple #13
0
        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);
        }
Exemple #15
0
        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);
        }