Fix notes being judged as misses an index too early. Obvious on
ridiculously slow songs (MAX3), but could affect reasonably slow sections, too (Sakura).
This commit is contained in:
@@ -343,14 +343,13 @@ void Player::DrawPrimitives()
|
|||||||
m_HoldJudgment[c].Draw();
|
m_HoldJudgment[c].Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Player::GetClosestNoteDirectional( int col, float fBeat, float fMaxSecondsDistance, int iDirection )
|
int Player::GetClosestNoteDirectional( int col, float fBeat, float fMaxBeatsDistance, int iDirection )
|
||||||
{
|
{
|
||||||
// look for the closest matching step
|
// look for the closest matching step
|
||||||
const int iIndexStartLookingAt = BeatToNoteRow( fBeat );
|
const int iIndexStartLookingAt = BeatToNoteRow( fBeat );
|
||||||
|
|
||||||
// number of elements to examine on either end of iIndexStartLookingAt
|
// number of elements to examine on either end of iIndexStartLookingAt
|
||||||
const int iNumElementsToExamine = BeatToNoteRow( fMaxSecondsDistance );
|
const int iNumElementsToExamine = BeatToNoteRow( fMaxBeatsDistance );
|
||||||
|
|
||||||
// Start at iIndexStartLookingAt and search outward.
|
// Start at iIndexStartLookingAt and search outward.
|
||||||
for( int delta=0; delta < iNumElementsToExamine; delta++ )
|
for( int delta=0; delta < iNumElementsToExamine; delta++ )
|
||||||
{
|
{
|
||||||
@@ -544,9 +543,19 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
|||||||
{
|
{
|
||||||
//LOG->Trace( "Notes::UpdateTapNotesMissedOlderThan(%f)", fMissIfOlderThanThisBeat );
|
//LOG->Trace( "Notes::UpdateTapNotesMissedOlderThan(%f)", fMissIfOlderThanThisBeat );
|
||||||
const float fEarliestTime = GAMESTATE->m_fMusicSeconds - fMissIfOlderThanSeconds;
|
const float fEarliestTime = GAMESTATE->m_fMusicSeconds - fMissIfOlderThanSeconds;
|
||||||
const float fMissIfOlderThanThisBeat = GAMESTATE->m_pCurSong->GetBeatFromElapsedTime(fEarliestTime);
|
bool bFreeze;
|
||||||
|
float fMissIfOlderThanThisBeat;
|
||||||
|
float fThrowAway;
|
||||||
|
GAMESTATE->m_pCurSong->GetBeatAndBPSFromElapsedTime( fEarliestTime, fMissIfOlderThanThisBeat, fThrowAway, bFreeze );
|
||||||
|
|
||||||
int iMissIfOlderThanThisIndex = BeatToNoteRow( fMissIfOlderThanThisBeat );
|
int iMissIfOlderThanThisIndex = BeatToNoteRow( fMissIfOlderThanThisBeat );
|
||||||
|
if( bFreeze )
|
||||||
|
{
|
||||||
|
/* iMissIfOlderThanThisIndex is a freeze. Include the index of the freeze,
|
||||||
|
* too. Otherwise we won't show misses for tap notes on freezes until the
|
||||||
|
* freeze finishes. */
|
||||||
|
iMissIfOlderThanThisIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
// Since this is being called every frame, let's not check the whole array every time.
|
// 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.
|
// Instead, only check 10 elements back. Even 10 is overkill.
|
||||||
@@ -554,12 +563,8 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
|||||||
|
|
||||||
//LOG->Trace( "iStartCheckingAt: %d iMissIfOlderThanThisIndex: %d", iStartCheckingAt, iMissIfOlderThanThisIndex );
|
//LOG->Trace( "iStartCheckingAt: %d iMissIfOlderThanThisIndex: %d", iStartCheckingAt, iMissIfOlderThanThisIndex );
|
||||||
|
|
||||||
/* If we're on a freeze, and the freeze has been running for fMissIfOlderThanSeconds,
|
|
||||||
* then iMissIfOlderThanThisIndex will be the freeze itself, in which case we do
|
|
||||||
* want to update the row of the freeze itself; otherwise we won't show misses
|
|
||||||
* for tap notes on freezes until the freeze finishes. */
|
|
||||||
int iNumMissesFound = 0;
|
int iNumMissesFound = 0;
|
||||||
for( int r=iStartCheckingAt; r<=iMissIfOlderThanThisIndex; r++ )
|
for( int r=iStartCheckingAt; r<iMissIfOlderThanThisIndex; r++ )
|
||||||
{
|
{
|
||||||
bool MissedNoteOnThisRow = false;
|
bool MissedNoteOnThisRow = false;
|
||||||
for( int t=0; t<GetNumTracks(); t++ )
|
for( int t=0; t<GetNumTracks(); t++ )
|
||||||
|
|||||||
Reference in New Issue
Block a user