Only play one copy of each mine sound at a time per player. This reduces clipping from excessive mines and makes them less annoying.

This commit is contained in:
Glenn Maynard
2007-02-01 03:52:50 +00:00
parent 1bdbe78390
commit 5c95e56ad8
+11 -2
View File
@@ -2117,6 +2117,7 @@ void Player::UpdateJudgedRows()
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( m_iMineRowLastJudged+1, iEndRow+1, MinesNotHidden ); NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( m_iMineRowLastJudged+1, iEndRow+1, MinesNotHidden );
bAllJudged = true; bAllJudged = true;
set<RageSound *> setSounds;
for( ; !iter.IsAtEnd(); ++iter ) for( ; !iter.IsAtEnd(); ++iter )
{ {
TapNote &tn = *iter; TapNote &tn = *iter;
@@ -2134,9 +2135,9 @@ void Player::UpdateJudgedRows()
if( tn.pn != PLAYER_INVALID && tn.pn != pn ) if( tn.pn != PLAYER_INVALID && tn.pn != pn )
continue; continue;
if( tn.iKeysoundIndex >= 0 && tn.iKeysoundIndex < (int) m_vKeysounds.size() ) if( tn.iKeysoundIndex >= 0 && tn.iKeysoundIndex < (int) m_vKeysounds.size() )
m_vKeysounds[tn.iKeysoundIndex].Play(); setSounds.insert( &m_vKeysounds[tn.iKeysoundIndex] );
else else
m_soundMine.Play(); setSounds.insert( &m_soundMine );
ChangeLife( tn.result.tns ); ChangeLife( tn.result.tns );
if( m_pScoreDisplay ) if( m_pScoreDisplay )
@@ -2154,6 +2155,14 @@ void Player::UpdateJudgedRows()
if( bAllJudged && iter.Row() - 1 > m_iMineRowLastJudged ) if( bAllJudged && iter.Row() - 1 > m_iMineRowLastJudged )
m_iMineRowLastJudged = iter.Row() - 1; m_iMineRowLastJudged = iter.Row() - 1;
} }
FOREACHS( RageSound *, setSounds, s )
{
/* Only play one copy of each mine sound at a time per player. */
(*s)->Stop();
(*s)->Play();
}
if( bAllJudged ) if( bAllJudged )
m_iMineRowLastJudged = iEndRow; m_iMineRowLastJudged = iEndRow;
} }