From e31d0ce615b087c4af6cd500d46d362d86cfaf55 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 12 Feb 2005 21:07:13 +0000 Subject: [PATCH] experiment: expose global singletons and their methods in Lua so we don't end up with tons of Lua function polluting the global namespace --- stepmania/src/GameState.cpp | 38 +++++++++++++++++++++++++++++++++++++ stepmania/src/GameState.h | 4 ++++ 2 files changed, 42 insertions(+) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 64e5965797..a809812199 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -1867,6 +1867,44 @@ bool PlayerIsUsingModifier( PlayerNumber pn, const CString sModifier ) return po == GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions && so == GAMESTATE->m_SongOptions; } + + + +// lua start +#include "LuaBinding.h" + +template +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)-1)) ); return 1; } + static int IsHumanPlayer( T* p, lua_State *L ) { lua_pushboolean(L, p->IsHumanPlayer((PlayerNumber)(IArg(1)-1)) ); return 1; } + static int GetPlayerDisplayName( T* p, lua_State *L ) { lua_pushstring(L, p->GetPlayerDisplayName((PlayerNumber)(IArg(1)-1)) ); return 1; } + + static void Register(lua_State *L) + { + ADD_METHOD( IsPlayerEnabled ) + ADD_METHOD( IsHumanPlayer ) + ADD_METHOD( GetPlayerDisplayName ) + Luna::Register( L ); + + // add global singleton + ASSERT( GAMESTATE ); + lua_pushstring(L, "GAMESTATE"); + GAMESTATE->PushSelf( LUA->L ); + lua_settable(L, LUA_GLOBALSINDEX); + } +}; + +LUA_REGISTER_CLASS( GameState ) +// lua end + + + + + #include "LuaFunctions.h" LuaFunction_PlayerNumber( IsPlayerEnabled, GAMESTATE->IsPlayerEnabled(pn) ) LuaFunction_PlayerNumber( IsHumanPlayer, GAMESTATE->IsHumanPlayer(pn) ) diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index e0efde4f0f..d30b96b8ef 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -24,6 +24,7 @@ class Character; class TimingData; struct StageStats; struct PlayerState; +struct lua_State; class GameState { @@ -271,6 +272,9 @@ public: int m_iAddToAllCourseEntryMeters; // 0 == no change int m_iStopCourseAtSeconds; // -1 == don't stop early bool m_bAutoAdjustMeterDuringCorse; + + // Lua + virtual void PushSelf( lua_State *L ); };