From aa279e07e2e06335b3dfc7af9ea1f1f530f0f1ba Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 24 Feb 2005 20:04:46 +0000 Subject: [PATCH] lua --- stepmania/src/MessageManager.cpp | 35 ++++++++++++++++++++++++++++++++ stepmania/src/MessageManager.h | 5 +++++ 2 files changed, 40 insertions(+) diff --git a/stepmania/src/MessageManager.cpp b/stepmania/src/MessageManager.cpp index 5ef95a2088..c1d240b1b6 100644 --- a/stepmania/src/MessageManager.cpp +++ b/stepmania/src/MessageManager.cpp @@ -59,6 +59,41 @@ void MessageManager::Broadcast( const CString& sMessage ) } } +// lua start +#include "LuaBinding.h" + +template +class LunaMessageManager: public Luna +{ +public: + LunaMessageManager() { LUA->Register( Register ); } + + static int Broadcast( T* p, lua_State *L ) + { + p->Broadcast( SArg(1) ); + return 0; + } + + static void Register(lua_State *L) + { + ADD_METHOD( Broadcast ) + Luna::Register( L ); + + // Add global singleton if constructed already. If it's not constructed yet, + // then we'll register it later when we reinit Lua just before + // initializing the display. + if( MESSAGEMAN ) + { + lua_pushstring(L, "MESSAGEMAN"); + MESSAGEMAN->PushSelf( LUA->L ); + lua_settable(L, LUA_GLOBALSINDEX); + } + } +}; + +LUA_REGISTER_CLASS( MessageManager ) +// lua end + /* * (c) 2003-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index de36960db3..24898cfb77 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -12,6 +12,8 @@ public: virtual void HandleMessage( const CString& sMessage ) = 0; }; +struct lua_State; + enum Message { MESSAGE_CURRENT_SONG_CHANGED, @@ -43,6 +45,9 @@ public: void Unsubscribe( IMessageSubscriber* pSubscriber, Message m ); void Broadcast( const CString& sMessage ); + // Lua + void PushSelf( lua_State *L ); + private: typedef set SubscribersSet; map m_MessageToSubscribers;