From be64c240c31b943395a35b3fdde2421f40077aac Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Sat, 30 Aug 2014 00:47:07 -0600 Subject: [PATCH] Added Swap Up/Down option to Edit Alter Menu. --- Themes/_fallback/Languages/en.ini | 1 + src/NoteDataUtil.cpp | 53 +++++++++++++++++++++++++++++++ src/NoteDataUtil.h | 2 ++ src/ScreenEdit.cpp | 3 +- src/ScreenEdit.h | 21 ++++++------ 5 files changed, 69 insertions(+), 11 deletions(-) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index f1e4e8f607..1e7b06f2f7 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -791,6 +791,7 @@ SuddenOffset=Sudden Offset SuperShuffle=Cement Mixer SoftShuffle=Soft Shuffle Swap Sides=Swap Sides +Swap Up/Down=Swap Up/Down Sync Machine=Sync Machine Sync Song=Sync Song Sync Tempo=Sync Tempo diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp index 888d38b85b..ce0fcb8d8e 100644 --- a/src/NoteDataUtil.cpp +++ b/src/NoteDataUtil.cpp @@ -1453,6 +1453,49 @@ static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int Nu break; } break; + case NoteDataUtil::swap_up_down: + switch(st) + { + case StepsType_dance_single: + case StepsType_dance_double: + case StepsType_dance_couple: + case StepsType_dance_routine: + iTakeFromTrack[0]= 0; + iTakeFromTrack[1]= 2; + iTakeFromTrack[2]= 1; + iTakeFromTrack[3]= 3; + iTakeFromTrack[4]= 4; + iTakeFromTrack[5]= 6; + iTakeFromTrack[6]= 5; + iTakeFromTrack[7]= 7; + break; + case StepsType_pump_single: + case StepsType_pump_double: + case StepsType_pump_couple: + case StepsType_pump_routine: + iTakeFromTrack[0]= 1; + iTakeFromTrack[1]= 0; + iTakeFromTrack[2]= 2; + iTakeFromTrack[3]= 4; + iTakeFromTrack[4]= 3; + iTakeFromTrack[5]= 6; + iTakeFromTrack[6]= 5; + iTakeFromTrack[7]= 7; + iTakeFromTrack[8]= 9; + iTakeFromTrack[9]= 8; + break; + case StepsType_pump_halfdouble: + iTakeFromTrack[0]= 0; + iTakeFromTrack[1]= 2; + iTakeFromTrack[2]= 1; + iTakeFromTrack[3]= 4; + iTakeFromTrack[4]= 3; + iTakeFromTrack[5]= 5; + break; + default: + break; + } + break; default: ASSERT(0); } @@ -2221,6 +2264,16 @@ void NoteDataUtil::ShiftRight( NoteData &inout ) ShiftTracks( inout, +1 ); } +void NoteDataUtil::SwapUpDown(NoteData& inout, StepsType st) +{ + int TakeFrom[MAX_NOTE_TRACKS]; + GetTrackMapping(st, NoteDataUtil::swap_up_down, inout.GetNumTracks(), TakeFrom); + NoteData tempND; + tempND.LoadTransformed(inout, inout.GetNumTracks(), TakeFrom); + inout.CopyAll(tempND); + inout.RevalidateATIs(vector(), false); +} + struct ValidRow { diff --git a/src/NoteDataUtil.h b/src/NoteDataUtil.h index 80cd677797..8b6aa382bb 100644 --- a/src/NoteDataUtil.h +++ b/src/NoteDataUtil.h @@ -124,6 +124,7 @@ namespace NoteDataUtil soft_shuffle, super_shuffle, stomp, + swap_up_down, NUM_TRACK_MAPPINGS }; void Turn( NoteData &inout, StepsType st, TrackMapping tt, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ); @@ -165,6 +166,7 @@ namespace NoteDataUtil void ShiftTracks( NoteData &inout, int iShiftBy ); void ShiftLeft( NoteData &inout ); void ShiftRight( NoteData &inout ); + void SwapUpDown( NoteData &inout, StepsType st ); void SnapToNearestNoteType( NoteData &inout, NoteType nt1, NoteType nt2, int iStartIndex, int iEndIndex ); diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 62657c2270..57b0dd0a0a 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -616,7 +616,7 @@ static MenuDef g_AlterMenu( MenuRowDef(ScreenEdit::alter, "Alter", true, EditMode_Practice, true, true, 0, "Autogen To Fill Width","Backwards","Swap Sides", "Copy Left To Right","Copy Right To Left","Clear Left","Clear Right", - "Collapse To One","Collapse Left","Shift Left","Shift Right" ), + "Collapse To One","Collapse Left","Shift Left","Shift Right", "Swap Up/Down" ), MenuRowDef(ScreenEdit::tempo, "Tempo", true, EditMode_Full, true, true, 0, "Compress 2x","Compress 3->2", "Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ), @@ -4676,6 +4676,7 @@ void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector &iAn case collapse_left: NoteDataUtil::CollapseLeft( m_Clipboard ); break; case shift_left: NoteDataUtil::ShiftLeft( m_Clipboard ); break; case shift_right: NoteDataUtil::ShiftRight( m_Clipboard ); break; + case swap_up_down: NoteDataUtil::SwapUpDown(m_Clipboard, GAMESTATE->m_pCurSteps[0]->m_StepsType); break; } HandleAreaMenuChoice( paste_at_begin_marker, false ); diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 93b880796f..4c6e7b63bf 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -491,16 +491,17 @@ public: enum AlterType { autogen_to_fill_width, - backwards, - swap_sides, - copy_left_to_right, - copy_right_to_left, - clear_left, - clear_right, - collapse_to_one, - collapse_left, - shift_left, - shift_right, + backwards, + swap_sides, + copy_left_to_right, + copy_right_to_left, + clear_left, + clear_right, + collapse_to_one, + collapse_left, + shift_left, + shift_right, + swap_up_down, NUM_ALTER_TYPES }; enum TempoType