static int l_anim_set_tile(lua_State *L) { T* pAnimation = luaT_testuserdata<T>(L); if(lua_isnoneornil(L, 2)) { pAnimation->removeFromTile(); lua_pushnil(L); luaT_setenvfield(L, 1, "map"); lua_settop(L, 1); } else { THMap* pMap = luaT_testuserdata<THMap>(L, 2); THMapNode* pNode = pMap->getNode(luaL_checkint(L, 3) - 1, luaL_checkint(L, 4) - 1); if(pNode) pAnimation->attachToTile(pNode, lastLayer); else { luaL_argerror(L, 3, lua_pushfstring(L, "Map index out of bounds (" LUA_NUMBER_FMT "," LUA_NUMBER_FMT ")", lua_tonumber(L, 3), lua_tonumber(L, 4))); } lua_settop(L, 2); luaT_setenvfield(L, 1, "map"); } return 1; }
static int l_anim_set_tag(lua_State *L) { luaT_testuserdata<THAnimation>(L); lua_settop(L, 2); luaT_setenvfield(L, 1, "tag"); return 1; }
static int l_soundfx_set_archive(lua_State *L) { THSoundEffects *pEffects = luaT_testuserdata<THSoundEffects>(L); THSoundArchive *pArchive = luaT_testuserdata<THSoundArchive>(L, 2); pEffects->setSoundArchive(pArchive); lua_settop(L, 2); luaT_setenvfield(L, 1, "archive"); return 1; }
static int l_path_set_map(lua_State *L) { pathfinder* pPathfinder = luaT_testuserdata<pathfinder>(L); level_map* pMap = luaT_testuserdata<level_map>(L, 2); lua_settop(L, 2); pPathfinder->set_default_map(pMap); luaT_setenvfield(L, 1, "map"); return 1; }
static int l_map_set_sheet(lua_State *L) { level_map* pMap = luaT_testuserdata<level_map>(L); sprite_sheet* pSheet = luaT_testuserdata<sprite_sheet>(L, 2); lua_settop(L, 2); pMap->set_block_sheet(pSheet); luaT_setenvfield(L, 1, "sprites"); return 1; }
/*! setCanvas(<video-surface>) */ static int l_anims_set_canvas(lua_State *L) { THAnimationManager* pAnims = luaT_testuserdata<THAnimationManager>(L); THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L, 2); lua_settop(L, 2); pAnims->setCanvas(pCanvas); luaT_setenvfield(L, 1, "target"); return 1; }
static int l_map_set_sheet(lua_State *L) { THMap* pMap = luaT_testuserdata<THMap>(L); THSpriteSheet* pSheet = luaT_testuserdata<THSpriteSheet>(L, 2); lua_settop(L, 2); pMap->setBlockSheet(pSheet); luaT_setenvfield(L, 1, "sprites"); return 1; }
static int l_rawbitmap_set_pal(lua_State *L) { THRawBitmap* pBitmap = luaT_testuserdata<THRawBitmap>(L); THPalette* pPalette = luaT_testuserdata<THPalette>(L, 2); lua_settop(L, 2); pBitmap->setPalette(pPalette); luaT_setenvfield(L, 1, "palette"); return 1; }
static int l_bitmap_font_set_spritesheet(lua_State *L) { THBitmapFont* pFont = luaT_testuserdata<THBitmapFont>(L); THSpriteSheet* pSheet = luaT_testuserdata<THSpriteSheet>(L, 2); lua_settop(L, 2); pFont->setSpriteSheet(pSheet); luaT_setenvfield(L, 1, "sprites"); return 1; }
static int l_srl_set_sheet(lua_State *L) { THSpriteRenderList *pSrl = luaT_testuserdata<THSpriteRenderList>(L); THSpriteSheet *pSheet = luaT_testuserdata<THSpriteSheet>(L, 2); pSrl->setSheet(pSheet); lua_settop(L, 2); luaT_setenvfield(L, 1, "sheet"); return 1; }
static int l_spritesheet_set_pal(lua_State *L) { THSpriteSheet* pSheet = luaT_testuserdata<THSpriteSheet>(L); THPalette* pPalette = luaT_testuserdata<THPalette>(L, 2); lua_settop(L, 2); pSheet->setPalette(pPalette); luaT_setenvfield(L, 1, "palette"); return 1; }
static int l_anims_set_spritesheet(lua_State *L) { THAnimationManager* pAnims = luaT_testuserdata<THAnimationManager>(L); THSpriteSheet* pSheet = luaT_testuserdata<THSpriteSheet>(L, 2); lua_settop(L, 2); pAnims->setSpriteSheet(pSheet); luaT_setenvfield(L, 1, "sprites"); return 1; }
static int l_freetype_font_set_face(lua_State *L) { THFreeTypeFont* pFont = luaT_testuserdata<THFreeTypeFont>(L); size_t iLength; const uint8_t* pData = luaT_checkfile(L, 2, &iLength); lua_settop(L, 2); l_freetype_throw_error_code(L, pFont->setFace(pData, iLength)); luaT_setenvfield(L, 1, "face"); return 1; }
static int l_anim_set_anim(lua_State *L) { THAnimation* pAnimation = luaT_testuserdata<THAnimation>(L); THAnimationManager* pManager = luaT_testuserdata<THAnimationManager>(L, 2); int iAnim = luaL_checkint(L, 3); if(iAnim < 0 || (unsigned int)iAnim >= pManager->getAnimationCount()) luaL_argerror(L, 3, "Animation index out of bounds"); if(lua_isnoneornil(L, 4)) pAnimation->setFlags(0); else pAnimation->setFlags(luaL_checkint(L, 4)); pAnimation->setAnimation(pManager, iAnim); lua_settop(L, 2); luaT_setenvfield(L, 1, "animator"); lua_pushnil(L); luaT_setenvfield(L, 1, "morph_target"); return 1; }
static int l_anim_set_morph(lua_State *L) { THAnimation* pAnimation = luaT_testuserdata<THAnimation>(L); THAnimation* pMorphTarget = luaT_testuserdata<THAnimation>(L, 2, luaT_environindex); unsigned int iDurationFactor = 1; if(!lua_isnoneornil(L, 3) && luaL_checkint(L, 3) > 0) iDurationFactor = luaL_checkint(L, 3); pAnimation->setMorphTarget(pMorphTarget, iDurationFactor); lua_settop(L, 2); luaT_setenvfield(L, 1, "morph_target"); return 1; }
static int l_isofs_set_root(lua_State *L) { IsoFilesystem *pSelf = luaT_testuserdata<IsoFilesystem>(L); FILE *fIso = *luaT_testuserdata<FILE*>(L, 2); if(pSelf->initialise(fIso)) { lua_pushvalue(L, 2); luaT_setenvfield(L, 1, "file"); lua_settop(L, 1); return 1; } else { lua_pushnil(L); lua_pushstring(L, pSelf->getError()); return 2; } }
static int l_load_music(lua_State *L) { size_t iLength; const uint8_t *pData = luaT_checkfile(L, 1, &iLength); SDL_RWops* rwop = SDL_RWFromConstMem(pData, (int)iLength); Mix_Music* pMusic = Mix_LoadMUS_RW(rwop, 1); if(pMusic == nullptr) { lua_pushnil(L); lua_pushstring(L, Mix_GetError()); return 2; } music_t* pLMusic = luaT_stdnew<music_t>(L, luaT_environindex, true); pLMusic->pMusic = pMusic; lua_pushvalue(L, 1); luaT_setenvfield(L, -2, "data"); return 1; }
static int l_load_music_async(lua_State *L) { size_t iLength; const uint8_t *pData = luaT_checkfile(L, 1, &iLength); luaL_checktype(L, 2, LUA_TFUNCTION); SDL_RWops* rwop = SDL_RWFromConstMem(pData, (int)iLength); lua_settop(L, 2); load_music_async_t *async = luaT_new(L, load_music_async_t); lua_pushlightuserdata(L, async); lua_pushvalue(L, -2); lua_settable(L, LUA_REGISTRYINDEX); async->L = L; async->music = nullptr; async->rwop = rwop; async->err = nullptr; lua_createtable(L, 2, 0); lua_pushthread(L); lua_rawseti(L, -2, 1); lua_pushvalue(L, 2); lua_rawseti(L, -2, 2); luaT_stdnew<music_t>(L, luaT_environindex, true); lua_pushvalue(L, 1); luaT_setenvfield(L, -2, "data"); lua_rawseti(L, -2, 3); lua_settable(L, LUA_REGISTRYINDEX); /* In registry: [light userdata async] -> [full userdata async] [full userdata async] -> { [1] = callback_thread, [2] = callback_function, [3] = empty music_t userdata, } New thread will load music, and inform the main loop, which will then call the callback and remove the new entries from the registry. */ SDL_CreateThread(load_music_async_thread, "music_thread", async); return 0; }