diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index d38509dad4..f6881aba18 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2705,8 +2705,10 @@ ShowRandom=1 Use3D=0 Wheel3DRadius=200 # Possibly safe defaults? CirclePercent=0.5 -MenuNames=GROUP:TITLE:BPM:PLAYERS' BEST:TOP GRADE:ARTIST:EASY METER:MEDIUM METER:HARD METER -MenuActions=sort,GROUP:sort,TITLE:sort,BPM:sort,PLAYERS BEST:sort,TOP GRADE:sort,ARTIST:sort,EASY METER:sort,MEDIUM METER:sort,HARD METER +SortMenuNames=GROUP:TITLE:BPM:PLAYERS' BEST:TOP GRADE:ARTIST:EASY METER:MEDIUM METER:HARD METER +SortMenuActions=sort,GROUP:sort,TITLE:sort,BPM:sort,PLAYERS BEST:sort,TOP GRADE:sort,ARTIST:sort,EASY METER:sort,MEDIUM METER:sort,HARD METER +ModeMenuNames=GROUP +ModeMenuActions=sort,GROUP [LifeMeterBar] MeterWidth=260 @@ -3000,8 +3002,10 @@ NextSort1=MenuLeft-MenuRight-Start NextSort2=MenuLeft+MenuRight NextSort3=Left-Right-Start NextSort4=Left+Right -Menu1=Up,Down,Up,Down -Menu2=MenuUp,MenuDown,MenuUp,MenuDown +SortMenu1=Up,Down,Up,Down +SortMenu2=MenuUp,MenuDown,MenuUp,MenuDown +ModeMenu1= +ModeMenu2= Mirror=Up,Left,Right,Left,Right Left=Up,Down,Right,Left Right=Up,Down,Left,Right diff --git a/stepmania/src/CodeDetector.cpp b/stepmania/src/CodeDetector.cpp index edc5e842ff..ae79c959e7 100644 --- a/stepmania/src/CodeDetector.cpp +++ b/stepmania/src/CodeDetector.cpp @@ -31,8 +31,10 @@ const CString g_sCodeNames[CodeDetector::NUM_CODES] = { "NextSort2", "NextSort3", "NextSort4", - "Menu1", - "Menu2", + "SortMenu1", + "SortMenu2", + "ModeMenu1", + "ModeMenu2", "Mirror", "Left", "Right", @@ -214,9 +216,14 @@ bool CodeDetector::EnteredNextSort( GameController controller ) EnteredCode(controller,CODE_NEXT_SORT4); } -bool CodeDetector::EnteredMenu( GameController controller ) +bool CodeDetector::EnteredSortMenu( GameController controller ) { - return EnteredCode(controller,CODE_MENU1) || EnteredCode(controller,CODE_MENU2); + return EnteredCode(controller,CODE_SORT_MENU1) || EnteredCode(controller,CODE_SORT_MENU2); +} + +bool CodeDetector::EnteredModeMenu( GameController controller ) +{ + return EnteredCode(controller,CODE_MODE_MENU1) || EnteredCode(controller,CODE_MODE_MENU2); } #define TOGGLE(v,a,b) if(v!=a) v=a; else v=b; diff --git a/stepmania/src/CodeDetector.h b/stepmania/src/CodeDetector.h index 5b35fad9f8..0f893f1d55 100644 --- a/stepmania/src/CodeDetector.h +++ b/stepmania/src/CodeDetector.h @@ -25,8 +25,10 @@ public: CODE_NEXT_SORT2, CODE_NEXT_SORT3, CODE_NEXT_SORT4, - CODE_MENU1, - CODE_MENU2, + CODE_SORT_MENU1, + CODE_SORT_MENU2, + CODE_MODE_MENU1, + CODE_MODE_MENU2, CODE_MIRROR, CODE_LEFT, CODE_RIGHT, @@ -61,7 +63,8 @@ public: static bool EnteredEasierDifficulty( GameController controller ); static bool EnteredHarderDifficulty( GameController controller ); static bool EnteredNextSort( GameController controller ); - static bool EnteredMenu( GameController controller ); + static bool EnteredSortMenu( GameController controller ); + static bool EnteredModeMenu( GameController controller ); static bool DetectAndAdjustMusicOptions( GameController controller ); static bool EnteredCode( GameController controller, Code code ); static bool EnteredNextBannerGroup( GameController controller ); diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index 8ef97a1cf5..cfcdfa3ea1 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -136,7 +136,8 @@ enum SongSortOrder { SORT_EASY_METER, SORT_MEDIUM_METER, SORT_HARD_METER, - SORT_MENU, + SORT_SORT_MENU, + SORT_MODE_MENU, SORT_ALL_COURSES, SORT_NONSTOP_COURSES, SORT_ONI_COURSES, diff --git a/stepmania/src/MusicWheel.cpp b/stepmania/src/MusicWheel.cpp index e70a035203..dd366fdb5b 100644 --- a/stepmania/src/MusicWheel.cpp +++ b/stepmania/src/MusicWheel.cpp @@ -56,8 +56,10 @@ CachedThemeMetricF CIRCLE_PERCENT ("MusicWheel","CirclePercent"); CachedThemeMetricB USE_3D ("MusicWheel","Use3D"); CachedThemeMetricI NUM_WHEEL_ITEMS_METRIC ("MusicWheel","NumWheelItems"); #define NUM_WHEEL_ITEMS min( MAX_WHEEL_ITEMS, (int) NUM_WHEEL_ITEMS_METRIC ) -#define MENU_NAMES THEME->GetMetric ("MusicWheel","MenuNames") -#define MENU_ACTIONS THEME->GetMetric ("MusicWheel","MenuActions") +#define SORT_MENU_NAMES THEME->GetMetric ("MusicWheel","SortMenuNames") +#define SORT_MENU_ACTIONS THEME->GetMetric ("MusicWheel","SortMenuActions") +#define MODE_MENU_NAMES THEME->GetMetric ("MusicWheel","ModeMenuNames") +#define MODE_MENU_ACTIONS THEME->GetMetric ("MusicWheel","ModeMenuActions") #define WHEEL_ITEM_ON_DELAY_CENTER THEME->GetMetricF("MusicWheel","WheelItemOnDelayCenter") #define WHEEL_ITEM_ON_DELAY_OFFSET THEME->GetMetricF("MusicWheel","WheelItemOnDelayOffset") #define WHEEL_ITEM_OFF_DELAY_CENTER THEME->GetMetricF("MusicWheel","WheelItemOffDelayCenter") @@ -76,8 +78,8 @@ static const SongSortOrder SortOrder[] = SORT_BPM, SORT_MOST_PLAYED, SORT_ARTIST, - SORT_INVALID }; +// use ARRAYSIZE(SortOrder) MusicWheel::MusicWheel() @@ -377,10 +379,12 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelItemDatas switch( so ) { - case SORT_MENU: + case SORT_SORT_MENU: + case SORT_MODE_MENU: { arrayWheelItemDatas.clear(); // clear out the previous wheel items - CString sNames = MENU_NAMES, sActions = MENU_ACTIONS; + CString sNames = so==SORT_SORT_MENU ? SORT_MENU_NAMES : MODE_MENU_NAMES; + CString sActions = so==SORT_SORT_MENU ? SORT_MENU_ACTIONS : MODE_MENU_ACTIONS; vector Names, Actions; split( sNames, ":", Names ); split( sActions, ":", Actions ); @@ -910,7 +914,8 @@ void MusicWheel::Update( float fDeltaTime ) if( GAMESTATE->m_pCurSong ) SelectSong( GAMESTATE->m_pCurSong ); break; - case SORT_MENU: + case SORT_SORT_MENU: + case SORT_MODE_MENU: SelectSort( m_LastSongSortOrder ); break; default: @@ -1139,29 +1144,26 @@ bool MusicWheel::ChangeSort( SongSortOrder new_so ) // return true if change suc bool MusicWheel::NextSort() // return true if change successful { - /* Is the current sort in the default sort order? */ - int cur = 0; - while( SortOrder[cur] != SORT_INVALID && SortOrder[cur] != GAMESTATE->m_SongSortOrder ) - ++cur; - - SongSortOrder so; - if( SortOrder[cur] == SORT_INVALID ) + // don't allow NextSort when on the sort menu or mode menu + switch( GAMESTATE->m_SongSortOrder ) { - /* It isn't, which means we're either in the sort menu or in a sort selected - * from the sort menu. If we're in the sort menu, return to the first sort. - * Otherwise, return to the sort menu. */ - if( GAMESTATE->m_SongSortOrder == SORT_MENU ) - so = SortOrder[0]; - else - so = SORT_MENU; - } else { - ++cur; - if( SortOrder[cur] == SORT_INVALID ) - cur = 0; - so = SortOrder[cur]; + case SORT_SORT_MENU: + case SORT_MODE_MENU: + return false; } - return ChangeSort( so ); + // find the index of the current sort + int cur = 0; + while( cur < ARRAYSIZE(SortOrder) && SortOrder[cur] != GAMESTATE->m_SongSortOrder ) + ++cur; + + // move to the next sort with wrapping + ++cur; + wrap( cur, ARRAYSIZE(SortOrder) ); + + // apply new sort + SongSortOrder soNew = SortOrder[cur]; + return ChangeSort( soNew ); } bool MusicWheel::Select() // return true if this selection ends the screen @@ -1283,7 +1285,7 @@ void MusicWheel::SetOpenGroup(CString group, SongSortOrder so) // - // Try to select the item that was selected before chaning groups + // Try to select the item that was selected before changing groups // m_iSelection = 0; diff --git a/stepmania/src/PaneDisplay.cpp b/stepmania/src/PaneDisplay.cpp index 7fdac27ffa..b8da843f59 100644 --- a/stepmania/src/PaneDisplay.cpp +++ b/stepmania/src/PaneDisplay.cpp @@ -350,7 +350,8 @@ PaneModes PaneDisplay::GetMode() const case SORT_ONI_COURSES: case SORT_ENDLESS_COURSES: return PANEMODE_COURSE; - case SORT_MENU: + case SORT_SORT_MENU: + case SORT_MODE_MENU: return m_CurMode; // leave it default: return PANEMODE_SONG; diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index 66eb7c8765..774d9aee7f 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -597,9 +597,12 @@ void ScreenSelectMusic::TweenScoreOnAndOffAfterChangeSort() case SORT_ENDLESS_COURSES: EnterCourseDisplayMode(); break; + case SORT_SORT_MENU: + case SORT_MODE_MENU: + // do nothing + break; default: - if( GAMESTATE->m_SongSortOrder != SORT_MENU ) - ExitCourseDisplayMode(); + ExitCourseDisplayMode(); break; } } @@ -708,12 +711,20 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, HarderDifficulty( pn ); return; } - if( CodeDetector::EnteredMenu(GameI.controller) ) + if( CodeDetector::EnteredSortMenu(GameI.controller) ) { if( ( GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage ) || GAMESTATE->IsExtraStage2() ) m_soundLocked.Play(); else - m_MusicWheel.ChangeSort( SORT_MENU ); + m_MusicWheel.ChangeSort( SORT_SORT_MENU ); + return; + } + if( CodeDetector::EnteredModeMenu(GameI.controller) ) + { + if( ( GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage ) || GAMESTATE->IsExtraStage2() ) + m_soundLocked.Play(); + else + m_MusicWheel.ChangeSort( SORT_MODE_MENU ); return; } if( CodeDetector::EnteredNextSort(GameI.controller) ) diff --git a/stepmania/src/Song.cpp b/stepmania/src/Song.cpp index 5f43069edf..c433f6f8c3 100644 --- a/stepmania/src/Song.cpp +++ b/stepmania/src/Song.cpp @@ -1463,7 +1463,8 @@ CString GetSectionNameFromSongAndSort( const Song* pSong, SongSortOrder so ) return ssprintf("%02d", pNotes->GetMeter() ); return "N/A"; } - case SORT_MENU: + case SORT_SORT_MENU: + case SORT_MODE_MENU: return ""; case SORT_ALL_COURSES: case SORT_NONSTOP_COURSES: