diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index c94ac62937..677cb62dce 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1050,72 +1050,7 @@ void ScreenGameplay::Update( float fDeltaTime ) // // check for fail // - switch( GAMESTATE->m_SongOptions.m_FailType ) - { - case SongOptions::FAIL_ARCADE: - switch( GAMESTATE->m_SongOptions.m_LifeType ) - { - case SongOptions::LIFE_BAR: - if( AllAreFailing() ) SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 ); - if( AllAreInDanger() ) m_Background.TurnDangerOn(); - else m_Background.TurnDangerOff(); - // check for individual fail - for ( pn=0; pnIsFailing() && !GAMESTATE->m_CurStageStats.bFailed[pn]) || - (m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn) && !GAMESTATE->m_CurStageStats.bFailed[pn]) ) - { - LOG->Trace("Player %d failed", (int)pn); - GAMESTATE->m_CurStageStats.bFailed[pn] = true; // fail - } - } - break; - case SongOptions::LIFE_BATTERY: - if( AllFailedEarlier() )SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 ); - if( AllAreInDanger() ) m_Background.TurnDangerOn(); - else m_Background.TurnDangerOff(); - - // check for individual fail - for( pn=0; pnIsPlayerEnabled(pn) ) - continue; - if( (m_pLifeMeter[pn] && !m_pLifeMeter[pn]->IsFailing()) || - (m_pCombinedLifeMeter && !m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn)) ) - continue; /* isn't failing */ - if( GAMESTATE->m_CurStageStats.bFailed[pn] ) - continue; /* failed and is already dead */ - - if( !AllFailedEarlier() ) // if not the last one to fail - { - // kill them! - m_soundOniDie.PlayRandom(); - ShowOniGameOver((PlayerNumber)pn); - m_Player[pn].Init(); // remove all notes and scoring - m_Player[pn].FadeToFail(); // tell the NoteField to fade to white - } - GAMESTATE->m_CurStageStats.bFailed[pn] = true; - } - break; - } - break; - case SongOptions::FAIL_END_OF_SONG: - // we still need to check for fail for scoring purposes - for ( pn=0; pnIsFailing() && !GAMESTATE->m_CurStageStats.bFailed[pn]) || - (m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn) && !GAMESTATE->m_CurStageStats.bFailed[pn]) ) - { - LOG->Trace("Player %d failed", (int)pn); - GAMESTATE->m_CurStageStats.bFailed[pn] = true; // fail - } - } - break; - case SongOptions::FAIL_OFF: - break; - default: - ASSERT(0); - } + UpdateCheckFail(); // // Check for enemy death in enemy battle @@ -1221,6 +1156,77 @@ void ScreenGameplay::Update( float fDeltaTime ) m_soundAssistTick.Play(); } +void ScreenGameplay::UpdateCheckFail() +{ + int pn; + switch( GAMESTATE->m_SongOptions.m_FailType ) + { + case SongOptions::FAIL_ARCADE: + switch( GAMESTATE->m_SongOptions.m_LifeType ) + { + case SongOptions::LIFE_BAR: + if( AllAreFailing() ) SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 ); + if( AllAreInDanger() ) m_Background.TurnDangerOn(); + else m_Background.TurnDangerOff(); + // check for individual fail + for ( pn=0; pnIsFailing() && !GAMESTATE->m_CurStageStats.bFailed[pn]) || + (m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn) && !GAMESTATE->m_CurStageStats.bFailed[pn]) ) + { + LOG->Trace("Player %d failed", (int)pn); + GAMESTATE->m_CurStageStats.bFailed[pn] = true; // fail + } + } + break; + case SongOptions::LIFE_BATTERY: + if( AllFailedEarlier() )SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 ); + if( AllAreInDanger() ) m_Background.TurnDangerOn(); + else m_Background.TurnDangerOff(); + + // check for individual fail + for( pn=0; pnIsPlayerEnabled(pn) ) + continue; + if( (m_pLifeMeter[pn] && !m_pLifeMeter[pn]->IsFailing()) || + (m_pCombinedLifeMeter && !m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn)) ) + continue; /* isn't failing */ + if( GAMESTATE->m_CurStageStats.bFailed[pn] ) + continue; /* failed and is already dead */ + + if( !AllFailedEarlier() ) // if not the last one to fail + { + // kill them! + m_soundOniDie.PlayRandom(); + ShowOniGameOver((PlayerNumber)pn); + m_Player[pn].Init(); // remove all notes and scoring + m_Player[pn].FadeToFail(); // tell the NoteField to fade to white + } + GAMESTATE->m_CurStageStats.bFailed[pn] = true; + } + break; + } + break; + case SongOptions::FAIL_END_OF_SONG: + // we still need to check for fail for scoring purposes + for ( pn=0; pnIsFailing() && !GAMESTATE->m_CurStageStats.bFailed[pn]) || + (m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn) && !GAMESTATE->m_CurStageStats.bFailed[pn]) ) + { + LOG->Trace("Player %d failed", (int)pn); + GAMESTATE->m_CurStageStats.bFailed[pn] = true; // fail + } + } + break; + case SongOptions::FAIL_OFF: + break; + default: + ASSERT(0); + } +} + void ScreenGameplay::AbortGiveUp() { if( m_GiveUpTimer.IsZero() ) diff --git a/stepmania/src/ScreenGameplay.h b/stepmania/src/ScreenGameplay.h index b2f71e856e..b58c76b394 100644 --- a/stepmania/src/ScreenGameplay.h +++ b/stepmania/src/ScreenGameplay.h @@ -81,6 +81,7 @@ protected: bool AllFailedEarlier(); bool IsTimeToPlayTicks() const; void UpdateLyrics( float fDeltaTime ); + void UpdateCheckFail(); enum DancingState { STATE_INTRO = 0, // not allowed to press Back