implement NoteDataUtil::ClearLeft and NoteDataUtil::ClearRight without 4s

This commit is contained in:
Glenn Maynard
2005-01-23 05:31:55 +00:00
parent 7b781d4534
commit 7cf3351851
3 changed files with 32 additions and 16 deletions
+26 -6
View File
@@ -40,12 +40,29 @@ void NoteData::SetNumTracks( int iNewNumTracks )
/* Clear [rowBegin,rowEnd]; that is, including rowEnd. */
void NoteData::ClearRange( int rowBegin, int rowEnd )
void NoteData::ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack )
{
/* Optimization: if the range encloses everything, just clear the whole maps. */
if( rowBegin == 0 && rowEnd == MAX_NOTE_ROW )
{
m_TapNotes[iTrack].clear();
for( int i = GetNumHoldNotes()-1; i >= 0; --i )
{
HoldNote hn = GetHoldNote(i);
if( hn.iTrack != iTrack )
continue;
this->RemoveHoldNote( i );
}
}
/* Crop or split hold notes overlapping the range. */
for( int i = GetNumHoldNotes()-1; i >= 0; --i ) // for each HoldNote
{
HoldNote hn = GetHoldNote(i);
if( hn.iTrack != iTrack )
continue;
if( !hn.RangeOverlaps(rowBegin, rowEnd) )
continue;
@@ -74,11 +91,14 @@ void NoteData::ClearRange( int rowBegin, int rowEnd )
}
/* Clear other notes in the region. */
for( int t=0; t<GetNumTracks(); t++ )
{
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( *this, t, r, rowBegin, rowEnd )
SetTapNote( t, r, TAP_EMPTY );
}
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( *this, iTrack, r, rowBegin, rowEnd )
SetTapNote( iTrack, r, TAP_EMPTY );
}
void NoteData::ClearRange( int rowBegin, int rowEnd )
{
for( int t=0; t < GetNumTracks(); ++t )
ClearRangeForTrack( rowBegin, rowEnd, t );
}
void NoteData::ClearAll()