コード例 #1
0
        public static IBaseData GenerateVMData(LuaTable luaData)
        {
            XLuaDataType luaDataType = luaData.Get <XLuaDataType>("__vm_type");

            switch (luaDataType)
            {
            case XLuaDataType.Boolean:
                return(new XLuaBaseData <bool>(luaData).VMData);

            case XLuaDataType.Float:
                return(new XLuaBaseData <float>(luaData).VMData);

            case XLuaDataType.Int:
                return(new XLuaBaseData <int>(luaData).VMData);

            case XLuaDataType.String:
                return(new XLuaBaseData <string>(luaData).VMData);

            case XLuaDataType.UserData:
                object obj     = luaData.Get <object>("__vm_value");
                Type   objType = obj.GetType();
                if (typeof(Enum).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Enum>(luaData).VMData);
                }
                else if (typeof(Color).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Color>(luaData).VMData);
                }
                else if (typeof(Vector2).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Vector2>(luaData).VMData);
                }
                else if (typeof(Vector3).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Vector3>(luaData).VMData);
                }
                else if (typeof(Rect).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Rect>(luaData).VMData);
                }
                else if (typeof(Sprite).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Sprite>(luaData).VMData);
                }
                else if (typeof(Texture).IsAssignableFrom(objType))
                {
                    return(new XLuaBaseData <Texture>(luaData).VMData);
                }
                return(null);

            default:
                return(null);
            }
        }
コード例 #2
0
        public static IData GenerateDataWithLuaTable(LuaTable luaData)
        {
            XLuaDataType luaDataType = luaData.Get <XLuaDataType>("__vm_type");

            if (luaDataType == XLuaDataType.List)
            {
                return(XLuaListData.GenerateVMData(luaData));
            }
            else if (luaDataType == XLuaDataType.Struct)
            {
                return(XLuaStructData.GenerateVMData(luaData));
            }
            else
            {
                return(XLuaBaseData.GenerateVMData(luaData));
            }
        }
コード例 #3
0
        private static IListData CreateListDataInstanceWithItemLuaTable(LuaTable itemData)
        {
            XLuaDataType firstDataType = itemData.Get <XLuaDataType>("__vm_type");

            switch (firstDataType)
            {
            case XLuaDataType.Boolean:
                return(new ListData <BaseData <bool> >());

            case XLuaDataType.Float:
                return(new ListData <BaseData <float> >());

            case XLuaDataType.Int:
                return(new ListData <BaseData <int> >());

            case XLuaDataType.String:
                return(new ListData <BaseData <string> >());

            case XLuaDataType.UserData:
                object obj     = itemData.Get <object>("__vm_value");
                Type   objType = obj.GetType();
                if (typeof(Enum).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Enum> >());
                }
                else if (typeof(Color).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Color> >());
                }
                else if (typeof(Vector2).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Vector2> >());
                }
                else if (typeof(Vector3).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Vector3> >());
                }
                else if (typeof(Rect).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Rect> >());
                }
                else if (typeof(Sprite).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Sprite> >());
                }
                else if (typeof(Texture).IsAssignableFrom(objType))
                {
                    return(new ListData <BaseData <Texture> >());
                }
                break;

            case XLuaDataType.List:
                LuaTable list  = itemData.Get <LuaTable>("__vm_value");
                LuaTable first = list.Get <int, LuaTable>(1);
                return(CreateNestListDataInstanceWithItemValueLuaTable(first));

            case XLuaDataType.Struct:
                return(new ListData <StructData>());

            default:
                return(null);
            }
            return(null);
        }
コード例 #4
0
        // 目前仅支持深度为 2 的 list
        private static IListData CreateNestListDataInstanceWithItemValueLuaTable(LuaTable valueData)
        {
            XLuaDataType firstDataType = valueData.Get <XLuaDataType>("__vm_type");

            switch (firstDataType)
            {
            case XLuaDataType.Boolean:
                return(new ListData <ListData <BaseData <bool> > >());

            case XLuaDataType.Float:
                return(new ListData <ListData <BaseData <float> > >());

            case XLuaDataType.Int:
                return(new ListData <ListData <BaseData <int> > >());

            case XLuaDataType.String:
                return(new ListData <ListData <BaseData <string> > >());

            case XLuaDataType.UserData:
                object obj     = valueData.Get <object>("__vm_value");
                Type   objType = obj.GetType();
                if (typeof(Enum).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Enum> > >());
                }
                else if (typeof(Color).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Color> > >());
                }
                else if (typeof(Vector2).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Vector2> > >());
                }
                else if (typeof(Vector3).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Vector3> > >());
                }
                else if (typeof(Rect).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Rect> > >());
                }
                else if (typeof(Sprite).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Sprite> > >());
                }
                else if (typeof(Texture).IsAssignableFrom(objType))
                {
                    return(new ListData <ListData <BaseData <Texture> > >());
                }
                break;

            case XLuaDataType.List:
                Debugger.LogError("XLuaListData", "can not generate nested list data of depth greater than 2.");
                return(null);

            case XLuaDataType.Struct:
                return(new ListData <ListData <StructData> >());

            default:
                return(null);
            }
            return(null);
        }