implement NoteDataUtil::ClearLeft and NoteDataUtil::ClearRight without 4s
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user