diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 0940bf3ecb..48c05a619f 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -213,7 +213,7 @@ void Player::Update( float fDeltaTime ) // // Check for TapNote misses // - UpdateTapNotesMissedOlderThan( GAMESTATE->m_fSongBeat - GetMaxBeatDifference() ); + UpdateTapNotesMissedOlderThan( GetMaxStepDistanceSeconds() ); // // update HoldNotes logic @@ -260,7 +260,7 @@ void Player::Update( float fDeltaTime ) } else { - if( fSongBeat-hn.m_fStartBeat > GetMaxBeatDifference() ) + if( fSongBeat-hn.m_fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() ) { // Decrease life fLife -= fDeltaTime/HOLD_ARROW_NG_TIME; @@ -553,24 +553,27 @@ void Player::OnRowDestroyed( int iIndexThatWasSteppedOn ) m_frameCombo.SetTweenZoom( 1 ); } -/* XXX: This should check a number of seconds back, not a number of beats. - * Currently, if a tap lies on a freeze, we won't show a MISS until the freeze - * ends. However, looking up the time value of each row (via GetElapsedTimeFromBeat) - * may be expensive ... */ -int Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanThisBeat ) +int Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds ) { //LOG->Trace( "Notes::UpdateTapNotesMissedOlderThan(%f)", fMissIfOlderThanThisBeat ); + const float fEarliestTime = GAMESTATE->m_fMusicSeconds - fMissIfOlderThanSeconds; + const float fMissIfOlderThanThisBeat = GAMESTATE->m_pCurSong->GetBeatFromElapsedTime(fEarliestTime); int iMissIfOlderThanThisIndex = BeatToNoteRow( fMissIfOlderThanThisBeat ); - int iNumMissesFound = 0; // Since this is being called every frame, let's not check the whole array every time. // Instead, only check 10 elements back. Even 10 is overkill. int iStartCheckingAt = max( 0, iMissIfOlderThanThisIndex-10 ); //LOG->Trace( "iStartCheckingAt: %d iMissIfOlderThanThisIndex: %d", iStartCheckingAt, iMissIfOlderThanThisIndex ); - for( int r=iStartCheckingAt; rm_fCurBPS * GAMESTATE->m_SongOptions.m_fMusicRate * PREFSMAN->m_fJudgeWindowBooSeconds * PREFSMAN->m_fJudgeWindowScale; + return GAMESTATE->m_SongOptions.m_fMusicRate * PREFSMAN->m_fJudgeWindowBooSeconds * PREFSMAN->m_fJudgeWindowScale; } void Player::FadeToFail() diff --git a/stepmania/src/Player.h b/stepmania/src/Player.h index 4b17d54978..f4527c3ca5 100644 --- a/stepmania/src/Player.h +++ b/stepmania/src/Player.h @@ -61,7 +61,7 @@ protected: int GetClosestBeatDirectional( int col, float fBeat, float fMaxBeatsAhead, int iDirection ); int GetClosestBeat( int col, float fBeat, float fMaxBeatsAhead, float fMaxBeatsBehind ); - static float GetMaxBeatDifference(); + static float GetMaxStepDistanceSeconds(); PlayerNumber m_PlayerNumber;