Fix NoteDataUtil::Backwards. I'm not sure why I spent the time fixing this--
what's the point? Are people making dance steps to Satanic messages or something?
This commit is contained in:
@@ -805,23 +805,47 @@ void NoteDataUtil::Turn( NoteData &inout, StepsType st, TrackMapping tt, int iSt
|
|||||||
|
|
||||||
void NoteDataUtil::Backwards( NoteData &inout )
|
void NoteDataUtil::Backwards( NoteData &inout )
|
||||||
{
|
{
|
||||||
inout.ConvertHoldNotesTo4s();
|
NoteData out;
|
||||||
|
out.SetNumTracks( inout.GetNumTracks() );
|
||||||
|
|
||||||
|
inout.ConvertHoldNotesTo2sAnd3s();
|
||||||
int max_row = inout.GetLastRow();
|
int max_row = inout.GetLastRow();
|
||||||
for( int t=0; t<inout.GetNumTracks(); t++ )
|
for( int t=0; t<inout.GetNumTracks(); t++ )
|
||||||
{
|
{
|
||||||
/* XXX: This is wrong. Is it worth fixing? (When is "Backwards" useful?) */
|
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( inout, t, r, 0, max_row )
|
||||||
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( inout, t, r, 0, max_row/2 )
|
|
||||||
{
|
{
|
||||||
int iRowEarlier = r;
|
int iRowEarlier = r;
|
||||||
int iRowLater = max_row-r;
|
int iRowLater = max_row-r;
|
||||||
|
|
||||||
const TapNote &tnEarlier = inout.GetTapNote(t, iRowEarlier);
|
TapNote tnEarlier = inout.GetTapNote(t, iRowEarlier);
|
||||||
const TapNote &tnLater = inout.GetTapNote(t, iRowLater);
|
out.SetTapNote(t, iRowLater, tnEarlier);
|
||||||
inout.SetTapNote(t, iRowEarlier, tnLater);
|
|
||||||
inout.SetTapNote(t, iRowLater, tnEarlier);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
inout.Convert4sToHoldNotes();
|
|
||||||
|
/* Un-flip hold_head and hold_tail. */
|
||||||
|
for( int t=0; t<out.GetNumTracks(); t++ )
|
||||||
|
{
|
||||||
|
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( out, t, r, 0, out.GetLastRow() )
|
||||||
|
{
|
||||||
|
TapNote tn = out.GetTapNote( t, r );
|
||||||
|
if( tn.type != TapNote::hold_tail )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int iTailRow = r;
|
||||||
|
while( out.GetNextTapNoteRowForTrack(t,iTailRow) )
|
||||||
|
{
|
||||||
|
TapNote tn2 = out.GetTapNote( t, iTailRow );
|
||||||
|
if( tn2.type != TapNote::hold_head )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
out.SetTapNote( t, r, tn2 );
|
||||||
|
out.SetTapNote( t, iTailRow, tn );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inout = out;
|
||||||
|
inout.Convert2sAnd3sToHoldNotes();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteDataUtil::SwapSides( NoteData &inout )
|
void NoteDataUtil::SwapSides( NoteData &inout )
|
||||||
|
|||||||
Reference in New Issue
Block a user