From c0e8327704dd76e412ca6eb60644b91113118de1 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 2 Mar 2007 06:15:56 +0000 Subject: [PATCH] don't propagate broadcasts --- stepmania/src/ActorFrame.cpp | 4 ++++ stepmania/src/MessageManager.cpp | 9 +++++++-- stepmania/src/MessageManager.h | 6 +++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/stepmania/src/ActorFrame.cpp b/stepmania/src/ActorFrame.cpp index b0e78dfc0f..82c45697b9 100644 --- a/stepmania/src/ActorFrame.cpp +++ b/stepmania/src/ActorFrame.cpp @@ -390,6 +390,10 @@ void ActorFrame::HandleMessage( const Message &msg ) { Actor::HandleMessage( msg ); + /* Don't propagate broadcasts. They'll receive it directly if they're subscribed. */ + if( msg.IsBroadcast() ) + return; + for( unsigned i=0; iGet(); m_pParams = new LuaTable; // XXX: creates an extra table params.PushSelf( L ); @@ -187,8 +189,10 @@ void MessageManager::Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m ) Unsubscribe( pSubscriber, MessageIDToString(m) ); } -void MessageManager::Broadcast( const Message &msg ) const +void MessageManager::Broadcast( Message &msg ) const { + msg.SetBroadcast(true); + LockMut(g_Mutex); map::const_iterator iter = g_MessageToSubscribers.find( msg.GetName() ); @@ -205,7 +209,8 @@ void MessageManager::Broadcast( const Message &msg ) const void MessageManager::Broadcast( const RString& sMessage ) const { ASSERT( !sMessage.empty() ); - Broadcast( Message(sMessage) ); + Message msg(sMessage); + Broadcast( msg ); } void MessageManager::Broadcast( MessageID m ) const diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index c50282b0b2..4e87d3aef4 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -88,6 +88,9 @@ struct Message ~Message(); RString GetName() const { return m_sName; } + bool IsBroadcast() const { return m_bBroadcast; } + void SetBroadcast( bool b ) { m_bBroadcast = b; } + void PushParamTable( lua_State *L ); const LuaReference &GetParamTable() const; void SetParamTable( const LuaReference ¶ms ); @@ -120,6 +123,7 @@ struct Message private: RString m_sName; LuaTable *m_pParams; + bool m_bBroadcast; }; class IMessageSubscriber @@ -162,7 +166,7 @@ public: void Subscribe( IMessageSubscriber* pSubscriber, MessageID m ); void Unsubscribe( IMessageSubscriber* pSubscriber, const RString& sMessage ); void Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m ); - void Broadcast( const Message &msg ) const; + void Broadcast( Message &msg ) const; void Broadcast( const RString& sMessage ) const; void Broadcast( MessageID m ) const;