From d93d2d168108af606a334b8f0f9b8d3d4f0dd520 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 6 Feb 2005 05:15:57 +0000 Subject: [PATCH] cache OPTION_ORDER --- stepmania/src/GameConstantsAndTypes.cpp | 12 ++++++++ stepmania/src/GameConstantsAndTypes.h | 14 ++++++++- stepmania/src/ScreenSelectMaster.cpp | 41 +++++++++++-------------- stepmania/src/ScreenSelectMaster.h | 16 ++-------- 4 files changed, 46 insertions(+), 37 deletions(-) diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index aa6b71f25c..b6e99a73a2 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -237,6 +237,18 @@ static const CString StyleTypeNames[NUM_STYLE_TYPES] = { XToString( StyleType ); StringToX( StyleType ); + +static const CString MenuDirNames[NUM_MENU_DIRS] = { + "Up", + "Down", + "Left", + "Right", + "Auto", +}; +XToString( MenuDir ); +StringToX( MenuDir ); + + #include "LuaFunctions.h" LuaFunction_NoArgs( CoinMode, CoinModeToString(PREFSMAN->m_CoinMode) ) LuaFunction_NoArgs( Premium, PremiumToString(PREFSMAN->m_Premium) ) diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index ea46e9adab..d28445e11e 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -35,7 +35,6 @@ const CString& RadarCategoryToString( RadarCategory cat ); const CString& RadarCategoryToThemedString( RadarCategory cat ); - enum StepsType { STEPS_TYPE_DANCE_SINGLE = 0, @@ -343,6 +342,19 @@ const CString& StyleTypeToString( StyleType s ); StyleType StringToStyleType( const CString& s ); +enum MenuDir +{ + MENU_DIR_UP, + MENU_DIR_DOWN, + MENU_DIR_LEFT, + MENU_DIR_RIGHT, + MENU_DIR_AUTO, // when players join and the selection becomes invalid + NUM_MENU_DIRS +}; +#define FOREACH_MenuDir( md ) FOREACH_ENUM( MenuDir, NUM_MENU_DIRS, md ) +const CString& MenuDirToString( MenuDir md ); + + #endif /* diff --git a/stepmania/src/ScreenSelectMaster.cpp b/stepmania/src/ScreenSelectMaster.cpp index 13c77152e4..6104065d14 100644 --- a/stepmania/src/ScreenSelectMaster.cpp +++ b/stepmania/src/ScreenSelectMaster.cpp @@ -14,18 +14,13 @@ #include "Foreach.h" #include "RageSoundManager.h" -#define OPTION_ORDER( dir ) THEME->GetMetric (m_sName,"OptionOrder"+CString(dir)) - -/* OptionOrderLeft=0:1,1:2,2:3,3:4 */ -const char *ScreenSelectMaster::dirs[NUM_DIRS] = -{ - "Up", "Down", "Left", "Right", "Auto" -}; const ScreenMessage SM_PlayPostSwitchPage = (ScreenMessage)(SM_User+1); CString CURSOR_OFFSET_X_FROM_ICON_NAME( size_t p, size_t part ) { return ssprintf("CursorPart%dP%dOffsetXFromIcon",part+1,p+1); } CString CURSOR_OFFSET_Y_FROM_ICON_NAME( size_t p, size_t part ) { return ssprintf("CursorPart%dP%dOffsetYFromIcon",part+1,p+1); } +/* e.g. "OptionOrderLeft=0:1,1:2,2:3,3:4" */ +CString OPTION_ORDER_NAME( size_t dir ) { return "OptionOrder"+MenuDirToString((MenuDir)dir); } REGISTER_SCREEN_CLASS( ScreenSelectMaster ); ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sClassName ), @@ -39,6 +34,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl PRE_SWITCH_PAGE_SECONDS(m_sName,"PreSwitchPageSeconds"), POST_SWITCH_PAGE_SECONDS(m_sName,"PostSwitchPageSeconds"), EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS(m_sName,"ExtraSleepAfterTweenOffSeconds"), + OPTION_ORDER(m_sName,OPTION_ORDER_NAME,NUM_MENU_DIRS), WRAP_CURSOR(m_sName,"WrapCursor"), SHOW_SCROLLER(m_sName,"ShowScroller"), SCROLLER_SECONDS_PER_ITEM(m_sName,"ScrollerSecondsPerItem"), @@ -202,7 +198,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl m_soundStart.Load( THEME->GetPathS(m_sName,"start") ); // init m_Next order info - for( int dir = 0; dir < NUM_DIRS; ++dir ) + FOREACH_MenuDir( dir ) { /* Reasonable defaults: */ for( unsigned c = 0; c < m_aGameCommands.size(); ++c ) @@ -210,21 +206,20 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl int add; switch( dir ) { - case DIR_UP: - case DIR_LEFT: add = -1; break; - default: add = +1; break; + case MENU_DIR_UP: + case MENU_DIR_LEFT: add = -1; break; + default: add = +1; break; } m_Next[dir][c] = c + add; - /* Always wrap around DIR_AUTO. */ - if( dir == DIR_AUTO || (bool)WRAP_CURSOR ) + /* Always wrap around MENU_DIR_AUTO. */ + if( dir == MENU_DIR_AUTO || (bool)WRAP_CURSOR ) wrap( m_Next[dir][c], m_aGameCommands.size() ); else m_Next[dir][c] = clamp( m_Next[dir][c], 0, (int)m_aGameCommands.size()-1 ); } - const CString dirname = dirs[dir]; - const CString order = OPTION_ORDER( dirname ); + const CString order = OPTION_ORDER.GetValue( dir ); vector parts; split( order, ",", parts, true ); @@ -236,7 +231,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl unsigned from, to; if( sscanf( parts[part], "%u:%u", &from, &to ) != 2 ) { - LOG->Warn( "%s::OptionOrder%s parse error", m_sName.c_str(), dirname.c_str() ); + LOG->Warn( "%s::OptionOrder%s parse error", m_sName.c_str(), MenuDirToString(dir).c_str() ); continue; } @@ -246,7 +241,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl if( from >= m_aGameCommands.size() || to >= m_aGameCommands.size() ) { - LOG->Warn( "%s::OptionOrder%s out of range", m_sName.c_str(), dirname.c_str() ); + LOG->Warn( "%s::OptionOrder%s out of range", m_sName.c_str(), MenuDirToString(dir).c_str() ); continue; } @@ -339,12 +334,12 @@ void ScreenSelectMaster::UpdateSelectableChoices() FOREACH_HumanPlayer( p ) { if( !m_aGameCommands[m_iChoice[p]].IsPlayable() ) - Move( p, DIR_AUTO ); + Move( p, MENU_DIR_AUTO ); ASSERT( m_aGameCommands[m_iChoice[p]].IsPlayable() ); } } -bool ScreenSelectMaster::Move( PlayerNumber pn, Dirs dir ) +bool ScreenSelectMaster::Move( PlayerNumber pn, MenuDir dir ) { int iSwitchToIndex = m_iChoice[pn]; set seen; @@ -366,7 +361,7 @@ void ScreenSelectMaster::MenuLeft( PlayerNumber pn ) { if( m_fLockInputSecs > 0 || m_bChosen[pn] ) return; - if( Move(pn, DIR_LEFT) ) + if( Move(pn, MENU_DIR_LEFT) ) m_soundChange.Play(); } @@ -374,7 +369,7 @@ void ScreenSelectMaster::MenuRight( PlayerNumber pn ) { if( m_fLockInputSecs > 0 || m_bChosen[pn] ) return; - if( Move(pn, DIR_RIGHT) ) + if( Move(pn, MENU_DIR_RIGHT) ) m_soundChange.Play(); } @@ -382,7 +377,7 @@ void ScreenSelectMaster::MenuUp( PlayerNumber pn ) { if( m_fLockInputSecs > 0 || m_bChosen[pn] ) return; - if( Move(pn, DIR_UP) ) + if( Move(pn, MENU_DIR_UP) ) m_soundChange.Play(); } @@ -390,7 +385,7 @@ void ScreenSelectMaster::MenuDown( PlayerNumber pn ) { if( m_fLockInputSecs > 0 || m_bChosen[pn] ) return; - if( Move(pn, DIR_DOWN) ) + if( Move(pn, MENU_DIR_DOWN) ) m_soundChange.Play(); } diff --git a/stepmania/src/ScreenSelectMaster.h b/stepmania/src/ScreenSelectMaster.h index 6ad71d896b..6491be0e43 100644 --- a/stepmania/src/ScreenSelectMaster.h +++ b/stepmania/src/ScreenSelectMaster.h @@ -46,7 +46,7 @@ protected: ThemeMetric PRE_SWITCH_PAGE_SECONDS; ThemeMetric POST_SWITCH_PAGE_SECONDS; ThemeMetric EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS; - //OPTION_ORDER( dir ) THEME->GetMetric (m_sName,"OptionOrder"+CString(dir)) + ThemeMetric1D OPTION_ORDER; ThemeMetric WRAP_CURSOR; ThemeMetric SHOW_SCROLLER; ThemeMetric SCROLLER_SECONDS_PER_ITEM; @@ -55,22 +55,12 @@ protected: ThemeMetric SCROLLER_SPACING_Y; ThemeMetric DEFAULT_CHOICE; - enum Dirs - { - DIR_UP, - DIR_DOWN, - DIR_LEFT, - DIR_RIGHT, - DIR_AUTO, // when players join and the selection becomes invalid - NUM_DIRS - }; - static const char *dirs[NUM_DIRS]; - int m_Next[NUM_DIRS][MAX_CHOICES]; + int m_Next[NUM_MENU_DIRS][MAX_CHOICES]; virtual int GetSelectionIndex( PlayerNumber pn ); virtual void UpdateSelectableChoices(); - bool Move( PlayerNumber pn, Dirs dir ); + bool Move( PlayerNumber pn, MenuDir dir ); bool ChangePage( int iNewChoice ); bool ChangeSelection( PlayerNumber pn, int iNewChoice ); float DoMenuStart( PlayerNumber pn );