diff --git a/stepmania/src/ScreenSelectCharacter.cpp b/stepmania/src/ScreenSelectCharacter.cpp index f27c6d6b94..9995fbff41 100644 --- a/stepmania/src/ScreenSelectCharacter.cpp +++ b/stepmania/src/ScreenSelectCharacter.cpp @@ -200,17 +200,14 @@ void ScreenSelectCharacter::HandleScreenMessage( const ScreenMessage SM ) { case SM_BeginFadingOut: StartTransitioning( SM_GoToNextScreen ); - break; + return; case SM_MenuTimer: MenuStart(PLAYER_1); - break; - case SM_GoToPrevScreen: - SCREENMAN->SetNewScreen( PREV_SCREEN ); - break; - case SM_GoToNextScreen: - SCREENMAN->SetNewScreen( NEXT_SCREEN ); - break; + if( !AllAreFinishedChoosing() ) + ResetTimer(); + return; } + Screen::HandleScreenMessage( SM ); } PlayerNumber ScreenSelectCharacter::GetAffectedPlayerNumber( PlayerNumber pn ) @@ -336,6 +333,14 @@ void ScreenSelectCharacter::Move( PlayerNumber pn, int deltaValue ) } } +bool ScreenSelectCharacter::AllAreFinishedChoosing() const +{ + FOREACH_HumanPlayer( p ) + if( m_SelectionRow[p] != FINISHED_CHOOSING ) + return false; + return true; +} + void ScreenSelectCharacter::MenuStart( PlayerNumber pn ) { if( m_SelectionRow[pn] == FINISHED_CHOOSING ) @@ -357,12 +362,7 @@ void ScreenSelectCharacter::MenuStart( PlayerNumber pn ) AfterValueChange(pn); SCREENMAN->PlayStartSound(); - bool bAllAreFinished = true; - for( int p=0; pIsHumanPlayer(p) ) - bAllAreFinished &= (m_SelectionRow[p] == FINISHED_CHOOSING); - - if( bAllAreFinished ) + if( AllAreFinishedChoosing() ) { for( int p=0; pSetName( "Timer" ); UtilSetXY( m_MenuTimer, m_sName ); UtilOnCommand( m_MenuTimer, m_sName ); - if( TIMER_SECONDS > 0 && PREFSMAN->m_bMenuTimer && !GAMESTATE->m_bEditing ) - m_MenuTimer->SetSeconds( TIMER_SECONDS ); - else - m_MenuTimer->Disable(); + ResetTimer(); this->AddChild( m_MenuTimer ); } @@ -120,6 +117,17 @@ ScreenWithMenuElements::~ScreenWithMenuElements() SAFE_DELETE( m_textHelp ); } +void ScreenWithMenuElements::ResetTimer() +{ + if( TIMER_SECONDS > 0 && PREFSMAN->m_bMenuTimer && !GAMESTATE->m_bEditing ) + { + m_MenuTimer->SetSeconds( TIMER_SECONDS ); + m_MenuTimer->Start(); + } + else + m_MenuTimer->Disable(); +} + void ScreenWithMenuElements::StartTransitioning( ScreenMessage smSendWhenDone ) { if( m_bTimerEnabled ) diff --git a/stepmania/src/ScreenWithMenuElements.h b/stepmania/src/ScreenWithMenuElements.h index 7fbd82d5d2..2d57fcd8ca 100644 --- a/stepmania/src/ScreenWithMenuElements.h +++ b/stepmania/src/ScreenWithMenuElements.h @@ -34,6 +34,7 @@ public: bool m_bTimerEnabled; void StopTimer(); + void ResetTimer(); protected: BGAnimation m_Background;