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. */
|
/* 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. */
|
/* Crop or split hold notes overlapping the range. */
|
||||||
for( int i = GetNumHoldNotes()-1; i >= 0; --i ) // for each HoldNote
|
for( int i = GetNumHoldNotes()-1; i >= 0; --i ) // for each HoldNote
|
||||||
{
|
{
|
||||||
HoldNote hn = GetHoldNote(i);
|
HoldNote hn = GetHoldNote(i);
|
||||||
|
if( hn.iTrack != iTrack )
|
||||||
|
continue;
|
||||||
|
|
||||||
if( !hn.RangeOverlaps(rowBegin, rowEnd) )
|
if( !hn.RangeOverlaps(rowBegin, rowEnd) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -74,11 +91,14 @@ void NoteData::ClearRange( int rowBegin, int rowEnd )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Clear other notes in the region. */
|
/* Clear other notes in the region. */
|
||||||
for( int t=0; t<GetNumTracks(); t++ )
|
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( *this, iTrack, r, rowBegin, rowEnd )
|
||||||
{
|
SetTapNote( iTrack, r, TAP_EMPTY );
|
||||||
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( *this, t, r, rowBegin, rowEnd )
|
|
||||||
SetTapNote( t, r, TAP_EMPTY );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NoteData::ClearRange( int rowBegin, int rowEnd )
|
||||||
|
{
|
||||||
|
for( int t=0; t < GetNumTracks(); ++t )
|
||||||
|
ClearRangeForTrack( rowBegin, rowEnd, t );
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteData::ClearAll()
|
void NoteData::ClearAll()
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ public:
|
|||||||
void MoveTapNoteTrack( int dest, int src );
|
void MoveTapNoteTrack( int dest, int src );
|
||||||
void SetTapNote( int track, int row, const TapNote& tn );
|
void SetTapNote( int track, int row, const TapNote& tn );
|
||||||
|
|
||||||
|
void ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack );
|
||||||
void ClearRange( int rowBegin, int rowEnd );
|
void ClearRange( int rowBegin, int rowEnd );
|
||||||
void ClearAll();
|
void ClearAll();
|
||||||
void CopyRange( const NoteData& from, int rowFromBegin, int rowFromEnd, int rowToBegin = 0 );
|
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 )
|
void NoteDataUtil::ClearLeft( NoteData &inout )
|
||||||
{
|
{
|
||||||
inout.ConvertHoldNotesTo4s();
|
|
||||||
for( int t=0; t<inout.GetNumTracks()/2; t++ )
|
for( int t=0; t<inout.GetNumTracks()/2; t++ )
|
||||||
FOREACH_NONEMPTY_ROW_IN_TRACK( inout, t, r )
|
inout.ClearRangeForTrack( 0, MAX_NOTE_ROW, t );
|
||||||
inout.SetTapNote(t, r, TAP_EMPTY);
|
|
||||||
inout.Convert4sToHoldNotes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteDataUtil::ClearRight( NoteData &inout )
|
void NoteDataUtil::ClearRight( NoteData &inout )
|
||||||
{
|
{
|
||||||
inout.ConvertHoldNotesTo4s();
|
|
||||||
for( int t=(inout.GetNumTracks()+1)/2; t<inout.GetNumTracks(); t++ )
|
for( int t=(inout.GetNumTracks()+1)/2; t<inout.GetNumTracks(); t++ )
|
||||||
FOREACH_NONEMPTY_ROW_IN_TRACK( inout, t, r )
|
inout.ClearRangeForTrack( 0, MAX_NOTE_ROW, t );
|
||||||
inout.SetTapNote(t, r, TAP_EMPTY);
|
|
||||||
inout.Convert4sToHoldNotes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteDataUtil::CollapseToOne( NoteData &inout )
|
void NoteDataUtil::CollapseToOne( NoteData &inout )
|
||||||
@@ -1586,10 +1580,11 @@ void NoteDataUtil::Scale( NoteData &nd, float fScale )
|
|||||||
}
|
}
|
||||||
#endif
|
#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 )
|
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( fScale > 0 );
|
||||||
ASSERT( iStartIndex < iEndIndex );
|
ASSERT( iStartIndex < iEndIndex );
|
||||||
ASSERT( iStartIndex >= 0 );
|
ASSERT( iStartIndex >= 0 );
|
||||||
|
|||||||
Reference in New Issue
Block a user