diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index be289477cf..fb9be0a3ee 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -1375,44 +1375,28 @@ void NoteDataUtil::CollapseLeft( NoteData &inout ) inout.Convert2sAnd3sToHoldNotes(); } +void NoteDataUtil::ShiftTracks( NoteData &inout, int iShiftBy ) +{ + int iOriginalTrackToTakeFrom[MAX_NOTE_TRACKS]; + for( int i = 0; i < inout.GetNumTracks(); ++i ) + { + int iFrom = i-iShiftBy; + wrap( iFrom, inout.GetNumTracks() ); + iOriginalTrackToTakeFrom[i] = iFrom; + } + + NoteData orig( inout ); + inout.LoadTransformed( orig, orig.GetNumTracks(), iOriginalTrackToTakeFrom ); +} + void NoteDataUtil::ShiftLeft( NoteData &inout ) { - inout.ConvertHoldNotesTo4s(); - FOREACH_NONEMPTY_ROW_ALL_TRACKS( inout, r ) - { - for( int t=0; t0; t-- ) // inout.GetNumTracks()-1 times - { - int iTrackEarlier = t; - int iTrackLater = (t+1) % inout.GetNumTracks(); - - // swap - TapNote tnEarlier = inout.GetTapNote(iTrackEarlier, r); - TapNote tnLater = inout.GetTapNote(iTrackLater, r); - inout.SetTapNote(iTrackEarlier, r, tnLater); - inout.SetTapNote(iTrackLater, r, tnEarlier); - } - } - inout.Convert4sToHoldNotes(); + ShiftTracks( inout, +1 ); } diff --git a/stepmania/src/NoteDataUtil.h b/stepmania/src/NoteDataUtil.h index 28aa35713e..8f9013be80 100644 --- a/stepmania/src/NoteDataUtil.h +++ b/stepmania/src/NoteDataUtil.h @@ -74,6 +74,7 @@ namespace NoteDataUtil void ClearRight( NoteData &inout ); void CollapseToOne( NoteData &inout ); void CollapseLeft( NoteData &inout ); + void ShiftTracks( NoteData &inout, int iShiftBy ); void ShiftLeft( NoteData &inout ); void ShiftRight( NoteData &inout );