diff --git a/stepmania/src/LuaReference.h b/stepmania/src/LuaReference.h index 70f95dc779..6ec07ab0f2 100644 --- a/stepmania/src/LuaReference.h +++ b/stepmania/src/LuaReference.h @@ -44,6 +44,18 @@ public: RString Serialize() const; + template + static LuaReference Create( const T &val ) + { + Lua *L = LUA->Get(); + LuaReference ref; + LuaHelpers::Push( L, val ); + ref.SetFromStack( L ); + LUA->Release( L ); + + return ref; + } + private: void Unregister(); int m_iReference; diff --git a/stepmania/src/ScreenGameplayLesson.cpp b/stepmania/src/ScreenGameplayLesson.cpp index cc3a69371e..0c1a85cb53 100644 --- a/stepmania/src/ScreenGameplayLesson.cpp +++ b/stepmania/src/ScreenGameplayLesson.cpp @@ -39,12 +39,9 @@ void ScreenGameplayLesson::Init() int i = s - vs.begin(); AutoActor &aa = m_vPages[i]; - - LUA->SetGlobal( "PageIndex", i ); - LUA->SetGlobal( "NumPages", (int)vs.size() ); + LuaThreadVariable iIndex( "PageIndex", LuaReference::Create(i) ); + LuaThreadVariable iPages( "NumPages", LuaReference::Create( (int)vs.size() ) ); aa.Load( *s ); - LUA->UnsetGlobal( "PageIndex" ); - LUA->UnsetGlobal( "NumPages" ); aa->SetDrawOrder( DRAW_ORDER_OVERLAY+1 );