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); } }
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)); } }
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); }
// 目前仅支持深度为 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); }