cache OPTION_ORDER
This commit is contained in:
@@ -237,6 +237,18 @@ static const CString StyleTypeNames[NUM_STYLE_TYPES] = {
|
|||||||
XToString( StyleType );
|
XToString( StyleType );
|
||||||
StringToX( StyleType );
|
StringToX( StyleType );
|
||||||
|
|
||||||
|
|
||||||
|
static const CString MenuDirNames[NUM_MENU_DIRS] = {
|
||||||
|
"Up",
|
||||||
|
"Down",
|
||||||
|
"Left",
|
||||||
|
"Right",
|
||||||
|
"Auto",
|
||||||
|
};
|
||||||
|
XToString( MenuDir );
|
||||||
|
StringToX( MenuDir );
|
||||||
|
|
||||||
|
|
||||||
#include "LuaFunctions.h"
|
#include "LuaFunctions.h"
|
||||||
LuaFunction_NoArgs( CoinMode, CoinModeToString(PREFSMAN->m_CoinMode) )
|
LuaFunction_NoArgs( CoinMode, CoinModeToString(PREFSMAN->m_CoinMode) )
|
||||||
LuaFunction_NoArgs( Premium, PremiumToString(PREFSMAN->m_Premium) )
|
LuaFunction_NoArgs( Premium, PremiumToString(PREFSMAN->m_Premium) )
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ const CString& RadarCategoryToString( RadarCategory cat );
|
|||||||
const CString& RadarCategoryToThemedString( RadarCategory cat );
|
const CString& RadarCategoryToThemedString( RadarCategory cat );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum StepsType
|
enum StepsType
|
||||||
{
|
{
|
||||||
STEPS_TYPE_DANCE_SINGLE = 0,
|
STEPS_TYPE_DANCE_SINGLE = 0,
|
||||||
@@ -343,6 +342,19 @@ const CString& StyleTypeToString( StyleType s );
|
|||||||
StyleType StringToStyleType( const CString& 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
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -14,18 +14,13 @@
|
|||||||
#include "Foreach.h"
|
#include "Foreach.h"
|
||||||
#include "RageSoundManager.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);
|
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_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); }
|
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 );
|
REGISTER_SCREEN_CLASS( ScreenSelectMaster );
|
||||||
ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sClassName ),
|
ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sClassName ),
|
||||||
@@ -39,6 +34,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl
|
|||||||
PRE_SWITCH_PAGE_SECONDS(m_sName,"PreSwitchPageSeconds"),
|
PRE_SWITCH_PAGE_SECONDS(m_sName,"PreSwitchPageSeconds"),
|
||||||
POST_SWITCH_PAGE_SECONDS(m_sName,"PostSwitchPageSeconds"),
|
POST_SWITCH_PAGE_SECONDS(m_sName,"PostSwitchPageSeconds"),
|
||||||
EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS(m_sName,"ExtraSleepAfterTweenOffSeconds"),
|
EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS(m_sName,"ExtraSleepAfterTweenOffSeconds"),
|
||||||
|
OPTION_ORDER(m_sName,OPTION_ORDER_NAME,NUM_MENU_DIRS),
|
||||||
WRAP_CURSOR(m_sName,"WrapCursor"),
|
WRAP_CURSOR(m_sName,"WrapCursor"),
|
||||||
SHOW_SCROLLER(m_sName,"ShowScroller"),
|
SHOW_SCROLLER(m_sName,"ShowScroller"),
|
||||||
SCROLLER_SECONDS_PER_ITEM(m_sName,"ScrollerSecondsPerItem"),
|
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") );
|
m_soundStart.Load( THEME->GetPathS(m_sName,"start") );
|
||||||
|
|
||||||
// init m_Next order info
|
// init m_Next order info
|
||||||
for( int dir = 0; dir < NUM_DIRS; ++dir )
|
FOREACH_MenuDir( dir )
|
||||||
{
|
{
|
||||||
/* Reasonable defaults: */
|
/* Reasonable defaults: */
|
||||||
for( unsigned c = 0; c < m_aGameCommands.size(); ++c )
|
for( unsigned c = 0; c < m_aGameCommands.size(); ++c )
|
||||||
@@ -210,21 +206,20 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl
|
|||||||
int add;
|
int add;
|
||||||
switch( dir )
|
switch( dir )
|
||||||
{
|
{
|
||||||
case DIR_UP:
|
case MENU_DIR_UP:
|
||||||
case DIR_LEFT: add = -1; break;
|
case MENU_DIR_LEFT: add = -1; break;
|
||||||
default: add = +1; break;
|
default: add = +1; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Next[dir][c] = c + add;
|
m_Next[dir][c] = c + add;
|
||||||
/* Always wrap around DIR_AUTO. */
|
/* Always wrap around MENU_DIR_AUTO. */
|
||||||
if( dir == DIR_AUTO || (bool)WRAP_CURSOR )
|
if( dir == MENU_DIR_AUTO || (bool)WRAP_CURSOR )
|
||||||
wrap( m_Next[dir][c], m_aGameCommands.size() );
|
wrap( m_Next[dir][c], m_aGameCommands.size() );
|
||||||
else
|
else
|
||||||
m_Next[dir][c] = clamp( m_Next[dir][c], 0, (int)m_aGameCommands.size()-1 );
|
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.GetValue( dir );
|
||||||
const CString order = OPTION_ORDER( dirname );
|
|
||||||
vector<CString> parts;
|
vector<CString> parts;
|
||||||
split( order, ",", parts, true );
|
split( order, ",", parts, true );
|
||||||
|
|
||||||
@@ -236,7 +231,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl
|
|||||||
unsigned from, to;
|
unsigned from, to;
|
||||||
if( sscanf( parts[part], "%u:%u", &from, &to ) != 2 )
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +241,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl
|
|||||||
if( from >= m_aGameCommands.size() ||
|
if( from >= m_aGameCommands.size() ||
|
||||||
to >= 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,12 +334,12 @@ void ScreenSelectMaster::UpdateSelectableChoices()
|
|||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
{
|
{
|
||||||
if( !m_aGameCommands[m_iChoice[p]].IsPlayable() )
|
if( !m_aGameCommands[m_iChoice[p]].IsPlayable() )
|
||||||
Move( p, DIR_AUTO );
|
Move( p, MENU_DIR_AUTO );
|
||||||
ASSERT( m_aGameCommands[m_iChoice[p]].IsPlayable() );
|
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];
|
int iSwitchToIndex = m_iChoice[pn];
|
||||||
set<int> seen;
|
set<int> seen;
|
||||||
@@ -366,7 +361,7 @@ void ScreenSelectMaster::MenuLeft( PlayerNumber pn )
|
|||||||
{
|
{
|
||||||
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
||||||
return;
|
return;
|
||||||
if( Move(pn, DIR_LEFT) )
|
if( Move(pn, MENU_DIR_LEFT) )
|
||||||
m_soundChange.Play();
|
m_soundChange.Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,7 +369,7 @@ void ScreenSelectMaster::MenuRight( PlayerNumber pn )
|
|||||||
{
|
{
|
||||||
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
||||||
return;
|
return;
|
||||||
if( Move(pn, DIR_RIGHT) )
|
if( Move(pn, MENU_DIR_RIGHT) )
|
||||||
m_soundChange.Play();
|
m_soundChange.Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,7 +377,7 @@ void ScreenSelectMaster::MenuUp( PlayerNumber pn )
|
|||||||
{
|
{
|
||||||
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
||||||
return;
|
return;
|
||||||
if( Move(pn, DIR_UP) )
|
if( Move(pn, MENU_DIR_UP) )
|
||||||
m_soundChange.Play();
|
m_soundChange.Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,7 +385,7 @@ void ScreenSelectMaster::MenuDown( PlayerNumber pn )
|
|||||||
{
|
{
|
||||||
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
if( m_fLockInputSecs > 0 || m_bChosen[pn] )
|
||||||
return;
|
return;
|
||||||
if( Move(pn, DIR_DOWN) )
|
if( Move(pn, MENU_DIR_DOWN) )
|
||||||
m_soundChange.Play();
|
m_soundChange.Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ protected:
|
|||||||
ThemeMetric<float> PRE_SWITCH_PAGE_SECONDS;
|
ThemeMetric<float> PRE_SWITCH_PAGE_SECONDS;
|
||||||
ThemeMetric<float> POST_SWITCH_PAGE_SECONDS;
|
ThemeMetric<float> POST_SWITCH_PAGE_SECONDS;
|
||||||
ThemeMetric<float> EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS;
|
ThemeMetric<float> EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS;
|
||||||
//OPTION_ORDER( dir ) THEME->GetMetric (m_sName,"OptionOrder"+CString(dir))
|
ThemeMetric1D<CString,NUM_MENU_DIRS> OPTION_ORDER;
|
||||||
ThemeMetric<bool> WRAP_CURSOR;
|
ThemeMetric<bool> WRAP_CURSOR;
|
||||||
ThemeMetric<bool> SHOW_SCROLLER;
|
ThemeMetric<bool> SHOW_SCROLLER;
|
||||||
ThemeMetric<float> SCROLLER_SECONDS_PER_ITEM;
|
ThemeMetric<float> SCROLLER_SECONDS_PER_ITEM;
|
||||||
@@ -55,22 +55,12 @@ protected:
|
|||||||
ThemeMetric<float> SCROLLER_SPACING_Y;
|
ThemeMetric<float> SCROLLER_SPACING_Y;
|
||||||
ThemeMetric<CString> DEFAULT_CHOICE;
|
ThemeMetric<CString> DEFAULT_CHOICE;
|
||||||
|
|
||||||
enum Dirs
|
int m_Next[NUM_MENU_DIRS][MAX_CHOICES];
|
||||||
{
|
|
||||||
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];
|
|
||||||
|
|
||||||
virtual int GetSelectionIndex( PlayerNumber pn );
|
virtual int GetSelectionIndex( PlayerNumber pn );
|
||||||
virtual void UpdateSelectableChoices();
|
virtual void UpdateSelectableChoices();
|
||||||
|
|
||||||
bool Move( PlayerNumber pn, Dirs dir );
|
bool Move( PlayerNumber pn, MenuDir dir );
|
||||||
bool ChangePage( int iNewChoice );
|
bool ChangePage( int iNewChoice );
|
||||||
bool ChangeSelection( PlayerNumber pn, int iNewChoice );
|
bool ChangeSelection( PlayerNumber pn, int iNewChoice );
|
||||||
float DoMenuStart( PlayerNumber pn );
|
float DoMenuStart( PlayerNumber pn );
|
||||||
|
|||||||
Reference in New Issue
Block a user