From a0732c62569ca8a2ef08e8029735f64dca426367 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 13 Sep 2007 04:35:36 +0000 Subject: [PATCH] fix correctness of void UpdateJudgedRows() (rows weren't being judged because the iterator was pointing to the middle of a row instead of the beginning of the row. --- stepmania/src/Player.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 79bc67cefe..0c0cd8a1bd 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -2183,7 +2183,8 @@ void Player::UpdateJudgedRows() bool bAllJudged = true; const bool bSeparately = GAMESTATE->GetCurrentGame()->m_bCountNotesSeparately; - NoteData::all_tracks_iterator &iter = *m_pIterUnjudgedRows; + { + NoteData::all_tracks_iterator iter = *m_pIterUnjudgedRows; int iLastSeenRow = -1; for( ; !iter.IsAtEnd() && iter.Row() <= iEndRow; iter++ ) { @@ -2191,12 +2192,16 @@ void Player::UpdateJudgedRows() if( iLastSeenRow != iRow ) { + iLastSeenRow = iRow; + // crossed a not-empty row if( !NoteDataWithScoring::IsRowCompletelyJudged(m_NoteData, iRow, pn) ) { bAllJudged = false; continue; } + if( bAllJudged ) + *m_pIterUnjudgedRows = iter; if( m_pJudgedRows->JudgeRow(iRow) ) continue; const TapNoteResult &lastTNR = NoteDataWithScoring::LastTapNoteWithResult( m_NoteData, iRow, pn ).result; @@ -2220,7 +2225,7 @@ void Player::UpdateJudgedRows() HandleTapRowScore( iRow ); } } - + } { bAllJudged = true; @@ -2234,11 +2239,9 @@ void Player::UpdateJudgedRows() if( iRow != iLastSeenRow ) { + iLastSeenRow = iRow; if( bAllJudged ) - { - SAFE_DELETE( m_pIterUnjudgedMineRows ); - m_pIterUnjudgedMineRows = new NoteData::all_tracks_iterator(iter); - } + *m_pIterUnjudgedMineRows = iter; } bool bMineNotHidden = tn.type == TapNote::mine && !tn.result.bHidden;