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()
+1
View File
@@ -68,6 +68,7 @@ public:
void MoveTapNoteTrack( int dest, int src );
void SetTapNote( int track, int row, const TapNote& tn );
void ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack );
void ClearRange( int rowBegin, int rowEnd );
void ClearAll();
void CopyRange( const NoteData& from, int rowFromBegin, int rowFromEnd, int rowToBegin = 0 );
+5 -10
View File
@@ -1323,20 +1323,14 @@ void NoteDataUtil::CopyRightToLeft( NoteData &inout )
void NoteDataUtil::ClearLeft( NoteData &inout )
{
inout.ConvertHoldNotesTo4s();
for( int t=0; t<inout.GetNumTracks()/2; t++ )
FOREACH_NONEMPTY_ROW_IN_TRACK( inout, t, r )
inout.SetTapNote(t, r, TAP_EMPTY);
inout.Convert4sToHoldNotes();
inout.ClearRangeForTrack( 0, MAX_NOTE_ROW, t );
}
void NoteDataUtil::ClearRight( NoteData &inout )
{
inout.ConvertHoldNotesTo4s();
for( int t=(inout.GetNumTracks()+1)/2; t<inout.GetNumTracks(); t++ )
FOREACH_NONEMPTY_ROW_IN_TRACK( inout, t, r )
inout.SetTapNote(t, r, TAP_EMPTY);
inout.Convert4sToHoldNotes();
inout.ClearRangeForTrack( 0, MAX_NOTE_ROW, t );
}
void NoteDataUtil::CollapseToOne( NoteData &inout )
@@ -1586,10 +1580,11 @@ void NoteDataUtil::Scale( NoteData &nd, float fScale )
}
#endif
// added to fix things in the editor - make sure that you're working off data that is
// either in 4s or in 2s and 3s.
void NoteDataUtil::ScaleRegion( NoteData &nd, float fScale, int iStartIndex, int iEndIndex )
{
// convert to 2sAnd3s before calling this
ASSERT( nd.GetNumHoldNotes() == 0 );
ASSERT( fScale > 0 );
ASSERT( iStartIndex < iEndIndex );
ASSERT( iStartIndex >= 0 );