diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 83e2310e27..277d30966d 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -1861,9 +1861,9 @@ class LunaGameState : public Luna public: LunaGameState() { LUA->Register( Register ); } - static int IsPlayerEnabled( T* p, lua_State *L ) { lua_pushboolean(L, p->IsPlayerEnabled((PlayerNumber)(IArg(1))) ); return 1; } - static int IsHumanPlayer( T* p, lua_State *L ) { lua_pushboolean(L, p->IsHumanPlayer((PlayerNumber)(IArg(1))) ); return 1; } - static int GetPlayerDisplayName( T* p, lua_State *L ) { lua_pushstring(L, p->GetPlayerDisplayName((PlayerNumber)(IArg(1))) ); return 1; } + static int IsPlayerEnabled( T* p, lua_State *L ) { lua_pushboolean(L, p->IsPlayerEnabled((PlayerNumber)IArg(1)) ); return 1; } + static int IsHumanPlayer( T* p, lua_State *L ) { lua_pushboolean(L, p->IsHumanPlayer((PlayerNumber)IArg(1)) ); return 1; } + static int GetPlayerDisplayName( T* p, lua_State *L ) { lua_pushstring(L, p->GetPlayerDisplayName((PlayerNumber)IArg(1)) ); return 1; } static int GetMasterPlayerNumber( T* p, lua_State *L ) { lua_pushnumber(L, p->m_MasterPlayerNumber ); return 1; } static int ApplyGameCommand( T* p, lua_State *L ) { @@ -1874,9 +1874,35 @@ public: return 0; } static int GetCurrentSong( T* p, lua_State *L ) { if(p->m_pCurSong) p->m_pCurSong->PushSelf(L); else lua_pushnil(L); return 1; } - static int SetCurrentSong( T* p, lua_State *L ) { Song *pS = Luna::check(L,1); p->m_pCurSong = pS; return 0; } + static int SetCurrentSong( T* p, lua_State *L ) + { + if( lua_isnil(L,1) ) { p->m_pCurSong = NULL; } + else { Song *pS = Luna::check(L,1); p->m_pCurSong = pS; } + return 0; + } + static int GetCurrentSteps( T* p, lua_State *L ) + { + PlayerNumber pn = (PlayerNumber)IArg(1); + Steps *pSteps = p->m_pCurSteps[pn]; + if( pSteps ) { pSteps->PushSelf(L); } + else { lua_pushnil(L); } + return 1; + } + static int SetCurrentSteps( T* p, lua_State *L ) + { + PlayerNumber pn = (PlayerNumber)IArg(1); + Steps *pSteps = p->m_pCurSteps[pn]; + if( lua_isnil(L,2) ) { p->m_pCurSteps[pn] = NULL; } + else { Song *pS = Luna::check(L,2); p->m_pCurSteps[pn] = pS; } + return 0; + } static int GetCurrentCourse( T* p, lua_State *L ) { if(p->m_pCurCourse) p->m_pCurCourse->PushSelf(L); else lua_pushnil(L); return 1; } - static int SetCurrentCourse( T* p, lua_State *L ) { Course *pC = Luna::check(L,1); p->m_pCurCourse = pC; return 0; } + static int SetCurrentCourse( T* p, lua_State *L ) + { + if( lua_isnil(L,1) ) { p->m_pCurCourse = NULL; } + else { Song *pC = Luna::check(L,1); p->m_pCurCourse = pC; } + return 0; + } static int SetTemporaryEventMode( T* p, lua_State *L ) { p->m_bTemporaryEventMode = BArg(1); return 0; } static void Register(lua_State *L) diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index d32de08950..add33fcc50 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -1239,17 +1239,24 @@ class LunaSongManager : public Luna public: LunaSongManager() { LUA->Register( Register ); } + static int GetAllSongs( T* p, lua_State *L ) + { + const vector &v = p->GetAllSongs(); + CreateTableFromArray( v, L ); + return 1; + } static int GetAllCourses( T* p, lua_State *L ) { - vector vCourses; - p->GetAllCourses( vCourses, BArg(1) ); - CreateTableFromArray( vCourses, L ); + vector v; + p->GetAllCourses( v, BArg(1) ); + CreateTableFromArray( v, L ); return 1; } static int FindCourse( T* p, lua_State *L ) { Course *pC = p->FindCourse(SArg(1)); if(pC) pC->PushSelf(L); else lua_pushnil(L); return 1; } static void Register(lua_State *L) { + ADD_METHOD( GetAllSongs ) ADD_METHOD( GetAllCourses ) ADD_METHOD( FindCourse ) Luna::Register( L );