diff --git a/stepmania/src/ScreenSelect.cpp b/stepmania/src/ScreenSelect.cpp index bfb9c855bf..fdddbdd42f 100644 --- a/stepmania/src/ScreenSelect.cpp +++ b/stepmania/src/ScreenSelect.cpp @@ -27,6 +27,7 @@ #define NEXT_SCREEN( c ) THEME->GetMetric (m_sName,ssprintf("NextScreen%d",c+1)) #define IDLE_TIMEOUT_SCREEN THEME->GetMetric (m_sName,"IdleTimeoutScreen") #define ALLOW_DISABLED_PLAYER_INPUT THEME->GetMetricB(m_sName,"AllowDisabledPlayerInput") +#define UPDATE_ON_MESSAGE THEME->GetMetric (m_sName,"UpdateOnMessage") ScreenSelect::ScreenSelect( CString sClassName ) : ScreenWithMenuElements(sClassName), @@ -40,6 +41,13 @@ void ScreenSelect::Init() { ScreenWithMenuElements::Init(); + // + // Load messages to update on + // + split( UPDATE_ON_MESSAGE, ",", m_asSubscribedMessages ); + for( unsigned i = 0; i < m_asSubscribedMessages.size(); ++i ) + MESSAGEMAN->Subscribe( this, m_asSubscribedMessages[i] ); + // // Load choices // @@ -95,6 +103,8 @@ void ScreenSelect::Init() ScreenSelect::~ScreenSelect() { LOG->Trace( "ScreenSelect::~ScreenSelect()" ); + for( unsigned i = 0; i < m_asSubscribedMessages.size(); ++i ) + MESSAGEMAN->Unsubscribe( this, m_asSubscribedMessages[i] ); } void ScreenSelect::Update( float fDelta ) @@ -248,6 +258,13 @@ void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) Screen::HandleScreenMessage( SM ); } +void ScreenSelect::HandleMessage( const CString &sMessage ) +{ + this->UpdateSelectableChoices(); + + Screen::HandleMessage( sMessage ); +} + void ScreenSelect::MenuBack( PlayerNumber pn ) { SOUND->StopMusic(); diff --git a/stepmania/src/ScreenSelect.h b/stepmania/src/ScreenSelect.h index 510c493460..716ae6463f 100644 --- a/stepmania/src/ScreenSelect.h +++ b/stepmania/src/ScreenSelect.h @@ -22,6 +22,7 @@ public: virtual void DrawPrimitives(); virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); virtual void HandleScreenMessage( const ScreenMessage SM ); + virtual void HandleMessage( const CString &sMessage ); virtual void MenuBack( PlayerNumber pn ); @@ -33,6 +34,7 @@ protected: vector m_aCodes; vector m_aCodeChoices; + vector m_asSubscribedMessages; RageTimer m_timerIdleComment; // count up to time between idle comment announcer sounds RageTimer m_timerIdleTimeout; // count up to go to the timeout screen