per-player explanation text on options screens

This commit is contained in:
Chris Danford
2003-11-05 07:46:20 +00:00
parent 3f873300e2
commit c36a787821
7 changed files with 134 additions and 55 deletions
+37 -2
View File
@@ -1768,8 +1768,12 @@ ItemsStartX=160
ItemsGapX=14
ItemsStartY=88
ItemsSpacingY=34
ExplanationX=320
ExplanationY=412
ExplanationP1X=180
ExplanationP1Y=412
ExplanationP2X=460
ExplanationP2Y=412
ExplanationTogetherX=320
ExplanationTogetherY=412
ExplanationZoom=0.5
ColorSelected=1,1,1,1 // normal
ColorNotSelected=0.5,0.5,0.5,1 // grayed
@@ -2728,6 +2732,23 @@ Line13=list,Profile Options;title,;
Line14=list,Reload Songs/Courses;title,;
Line15=list,Test Input;title,;
AppearanceOptions=
AutogenOptions=
BackgroundOptions=
Bookkeeping=
CenterImage=
CoinOptions=
ConfigKey/JoyMappings=
InputOptions=
GameplayOptions=
GraphicOptions=
MachineOptions=
SoundOptions=
ProfileOptions=
ReloadSongs/Courses=
TestInput=
[TextBanner]
TitleHorizX=-90
SubTitleHorizX=-90
@@ -2784,6 +2805,20 @@ OptionMenuFlags=rows,1;together
Line1=conf,Game
[ScreenPlayerOptions]
Speed=
Acceleration=
Effect=
Appearance=
Turn=
Transform=
Scroll=
NoteSkins=
Holds=
Hide=
Persp=
Steps=
Characters=
PrevScreenArcade=ScreenSelectMusic
PrevScreenNonstop=ScreenSelectCourse
PrevScreenOni=ScreenSelectCourse
+87 -39
View File
@@ -23,22 +23,25 @@
const float ITEM_X[NUM_PLAYERS] = { 260, 420 };
#define ICONS_X( p ) THEME->GetMetricF("ScreenOptions",ssprintf("IconsP%dX",p+1))
#define ARROWS_X THEME->GetMetricF("ScreenOptions","ArrowsX")
#define LABELS_X THEME->GetMetricF("ScreenOptions","LabelsX")
#define LABELS_ZOOM THEME->GetMetricF("ScreenOptions","LabelsZoom")
#define LABELS_H_ALIGN THEME->GetMetricI("ScreenOptions","LabelsHAlign")
#define ITEMS_ZOOM THEME->GetMetricF("ScreenOptions","ItemsZoom")
#define ITEMS_START_X THEME->GetMetricF("ScreenOptions","ItemsStartX")
#define ITEMS_GAP_X THEME->GetMetricF("ScreenOptions","ItemsGapX")
#define ITEMS_START_Y THEME->GetMetricF("ScreenOptions","ItemsStartY")
#define ITEMS_SPACING_Y THEME->GetMetricF("ScreenOptions","ItemsSpacingY")
#define EXPLANATION_X THEME->GetMetricF("ScreenOptions","ExplanationX")
#define EXPLANATION_Y THEME->GetMetricF("ScreenOptions","ExplanationY")
#define EXPLANATION_ZOOM THEME->GetMetricF("ScreenOptions","ExplanationZoom")
#define COLOR_SELECTED THEME->GetMetricC("ScreenOptions","ColorSelected")
#define COLOR_NOT_SELECTED THEME->GetMetricC("ScreenOptions","ColorNotSelected")
#define NUM_SHOWN_ITEMS THEME->GetMetricI("ScreenOptions","NumShownItems")
#define ICONS_X( p ) THEME->GetMetricF("ScreenOptions",ssprintf("IconsP%dX",p+1))
#define ARROWS_X THEME->GetMetricF("ScreenOptions","ArrowsX")
#define LABELS_X THEME->GetMetricF("ScreenOptions","LabelsX")
#define LABELS_ZOOM THEME->GetMetricF("ScreenOptions","LabelsZoom")
#define LABELS_H_ALIGN THEME->GetMetricI("ScreenOptions","LabelsHAlign")
#define ITEMS_ZOOM THEME->GetMetricF("ScreenOptions","ItemsZoom")
#define ITEMS_START_X THEME->GetMetricF("ScreenOptions","ItemsStartX")
#define ITEMS_GAP_X THEME->GetMetricF("ScreenOptions","ItemsGapX")
#define ITEMS_START_Y THEME->GetMetricF("ScreenOptions","ItemsStartY")
#define ITEMS_SPACING_Y THEME->GetMetricF("ScreenOptions","ItemsSpacingY")
#define EXPLANATION_X(p) THEME->GetMetricF("ScreenOptions",ssprintf("ExplanationP%dX",p+1))
#define EXPLANATION_Y(p) THEME->GetMetricF("ScreenOptions",ssprintf("ExplanationP%dY",p+1))
#define EXPLANATION_TOGETHER_X THEME->GetMetricF("ScreenOptions","ExplanationTogetherX")
#define EXPLANATION_TOGETHER_Y THEME->GetMetricF("ScreenOptions","ExplanationTogetherY")
#define ITEMS_SPACING_Y THEME->GetMetricF("ScreenOptions","ItemsSpacingY")
#define EXPLANATION_ZOOM THEME->GetMetricF("ScreenOptions","ExplanationZoom")
#define COLOR_SELECTED THEME->GetMetricC("ScreenOptions","ColorSelected")
#define COLOR_NOT_SELECTED THEME->GetMetricC("ScreenOptions","ColorNotSelected")
#define NUM_SHOWN_ITEMS THEME->GetMetricI("ScreenOptions","NumShownItems")
ScreenOptions::ScreenOptions( CString sClassName ) : Screen(sClassName)
{
@@ -73,14 +76,13 @@ ScreenOptions::ScreenOptions( CString sClassName ) : Screen(sClassName)
memset(&m_bRowIsLong, 0, sizeof(m_bRowIsLong));
}
void ScreenOptions::Init( InputMode im, OptionRow OptionRows[], int iNumOptionLines, bool bLoadExplanations )
void ScreenOptions::Init( InputMode im, OptionRow OptionRows[], int iNumOptionLines )
{
LOG->Trace( "ScreenOptions::Set()" );
m_InputMode = im;
m_OptionRow = OptionRows;
m_iNumOptionRows = iNumOptionLines;
m_bLoadExplanations = bLoadExplanations;
this->ImportOptions();
@@ -206,11 +208,41 @@ void ScreenOptions::Init( InputMode im, OptionRow OptionRows[], int iNumOptionLi
}
// add explanation here so it appears on top
m_textExplanation.LoadFromFont( THEME->GetPathToF("ScreenOptions explanation") );
m_textExplanation.SetXY( EXPLANATION_X, EXPLANATION_Y );
m_textExplanation.SetZoom( EXPLANATION_ZOOM );
m_textExplanation.SetShadowLength( 0 );
m_framePage.AddChild( &m_textExplanation );
switch( m_InputMode )
{
case INPUTMODE_INDIVIDUAL:
for( p=0; p<NUM_PLAYERS; p++ )
{
m_textExplanation[p].LoadFromFont( THEME->GetPathToF("ScreenOptions explanation") );
m_textExplanation[p].SetXY( EXPLANATION_X(p), EXPLANATION_Y(p) );
m_textExplanation[p].SetZoom( EXPLANATION_ZOOM );
m_textExplanation[p].SetShadowLength( 0 );
m_framePage.AddChild( &m_textExplanation[p] );
}
break;
case INPUTMODE_TOGETHER:
m_textExplanation[0].LoadFromFont( THEME->GetPathToF("ScreenOptions explanation") );
m_textExplanation[0].SetXY( EXPLANATION_TOGETHER_X, EXPLANATION_TOGETHER_Y );
m_textExplanation[0].SetZoom( EXPLANATION_ZOOM );
m_textExplanation[0].SetShadowLength( 0 );
m_framePage.AddChild( &m_textExplanation[0] );
break;
default:
ASSERT(0);
}
// poke once at all the explanation metrics so that we catch missing ones early
for( r=0; r<m_iNumOptionRows; r++ ) // foreach line
{
CString sLineName = m_OptionRow[r].name;
if( sLineName=="" )
sLineName = m_OptionRow[r].choices[0];
sLineName.Replace("\n-","");
sLineName.Replace("\n","");
sLineName.Replace(" ","");
CString sExplanation = THEME->GetMetric(m_sName,sLineName);
}
CHECKPOINT;
@@ -728,24 +760,40 @@ void ScreenOptions::OnChange()
PositionIcons();
UpdateEnabledDisabled();
for( int pn=0; pn<NUM_PLAYERS; pn++ )
TweenCursor( (PlayerNumber)pn );
int iCurRow = m_iCurrentRow[PLAYER_1];
bool bIsExitRow = iCurRow == m_iNumOptionRows;
if( !bIsExitRow && m_bLoadExplanations )
for( int p=0; p<NUM_PLAYERS; p++ )
{
CString sLineName = m_OptionRow[iCurRow].name;
if( sLineName=="" )
sLineName = m_OptionRow[iCurRow].choices[0];
sLineName.Replace("\n","");
sLineName.Replace(" ","");
m_textExplanation.SetText( THEME->GetMetric(m_sName,sLineName) );
TweenCursor( (PlayerNumber)p );
int iCurRow = m_iCurrentRow[p];
bool bIsExitRow = iCurRow == m_iNumOptionRows;
BitmapText *pText = NULL;
switch( m_InputMode )
{
case INPUTMODE_INDIVIDUAL:
pText = &m_textExplanation[p];
break;
case INPUTMODE_TOGETHER:
pText = &m_textExplanation[0];
break;
}
if( bIsExitRow )
{
pText->SetText( "" );
}
else
{
CString sLineName = m_OptionRow[iCurRow].name;
if( sLineName=="" )
sLineName = m_OptionRow[iCurRow].choices[0];
sLineName.Replace("\n-","");
sLineName.Replace("\n","");
sLineName.Replace(" ","");
pText->SetText( THEME->GetMetric(m_sName,sLineName) );
}
}
else
m_textExplanation.SetText( "" );
}
+2 -3
View File
@@ -53,7 +53,7 @@ class ScreenOptions : public Screen
{
public:
ScreenOptions( CString sClassName );
void Init( InputMode im, OptionRow OptionRow[], int iNumOptionLines, bool bLoadExplanations );
void Init( InputMode im, OptionRow OptionRow[], int iNumOptionLines );
virtual ~ScreenOptions();
virtual void Update( float fDeltaTime );
virtual void DrawPrimitives();
@@ -101,7 +101,6 @@ protected: // derived classes need access to these
private:
InputMode m_InputMode;
bool m_bLoadExplanations;
int m_iNumOptionRows;
@@ -122,7 +121,7 @@ private:
OptionIcon m_OptionIcons[NUM_PLAYERS][MAX_OPTION_LINES];
OptionsCursor m_Highlight[NUM_PLAYERS];
BitmapText m_textExplanation;
BitmapText m_textExplanation[NUM_PLAYERS];
RageSound m_SoundChangeCol;
RageSound m_SoundNextRow;
+1 -1
View File
@@ -275,7 +275,7 @@ ScreenOptionsMaster::ScreenOptionsMaster( CString sClassName ):
ASSERT( (int) OptionRowHandlers.size() == NumRows );
Init( im, m_OptionRowAlloc, NumRows, Explanations );
Init( im, m_OptionRowAlloc, NumRows );
}
ScreenOptionsMaster::~ScreenOptionsMaster()
+3 -4
View File
@@ -68,20 +68,19 @@ ScreenProfileOptions::ScreenProfileOptions( CString sClassName ) : ScreenOptions
PROFILEMAN->GetMachineProfileNames( g_ProfileOptionsLines[PO_RENAME_].choices );
if( PREFSMAN->m_sMemoryCardDir[PLAYER_1].empty() )
g_ProfileOptionsLines[PO_CARD_DIR_1].choices[0] = "-NONE. SPECIFY IN INI-";
g_ProfileOptionsLines[PO_CARD_DIR_1].choices[0] = "-NOT SET IN INI-";
else
g_ProfileOptionsLines[PO_CARD_DIR_1].choices[0] = PREFSMAN->m_sMemoryCardDir[PLAYER_1];
if( PREFSMAN->m_sMemoryCardDir[PLAYER_2].empty() )
g_ProfileOptionsLines[PO_CARD_DIR_2].choices[0] = "-NONE. SPECIFY IN INI-";
g_ProfileOptionsLines[PO_CARD_DIR_2].choices[0] = "-NOT SET IN INI-";
else
g_ProfileOptionsLines[PO_CARD_DIR_2].choices[0] = PREFSMAN->m_sMemoryCardDir[PLAYER_2];
Init(
INPUTMODE_TOGETHER,
g_ProfileOptionsLines,
NUM_PROFILE_OPTIONS_LINES,
true );
NUM_PROFILE_OPTIONS_LINES );
m_Menu.m_MenuTimer.Disable();
SOUND->PlayMusic( THEME->GetPathToS("ScreenMachineOptions music") );
+1 -2
View File
@@ -43,8 +43,7 @@ ScreenRaveOptions::ScreenRaveOptions( CString sClassName ): ScreenOptions( sClas
Init(
INPUTMODE_TOGETHER,
g_RaveOptionsLines,
GAMESTATE->AnyPlayersAreCpu()? 2 : 1,
false );
GAMESTATE->AnyPlayersAreCpu()? 2 : 1 );
}
void ScreenRaveOptions::ImportOptions()
+3 -4
View File
@@ -243,11 +243,9 @@ try_element_again:
"'%s/%s/%s'. Please remove all but one of these matches.",
sThemeName.c_str(), sCategory.c_str(), sFileName.c_str() );
#if defined(WIND32)
if( DISPLAY->IsWindowed() )
if( ArchHooks::retry == HOOKS->MessageBoxAbortRetryIgnore(message) )
if( ArchHooks::retry == HOOKS->MessageBoxRetryCancel(message) )
goto try_element_again;
#endif
RageException::Throw( message );
}
@@ -399,8 +397,8 @@ void ThemeManager::ReloadMetricsIfNecessary()
if( m_uHashForCurThemeMetrics != GetHashForFile(sCurMetricPath) ||
m_uHashForBaseThemeMetrics != GetHashForFile(sDefaultMetricPath) )
{
SCREENMAN->SystemMessage( "Reloading metrics" );
SwitchThemeAndLanguage(m_sCurThemeName, m_sCurLanguage); // force a reload of the metrics cache
SCREENMAN->SystemMessage( "Reloaded metrics" );
}
//
@@ -428,6 +426,7 @@ try_metric_again:
switch( HOOKS->MessageBoxRetryCancel(sMessage) )
{
case ArchHooks::retry:
FlushDirCache();
ReloadMetricsIfNecessary();
goto try_metric_again;
case ArchHooks::cancel: