From c36a787821a3e53c05f9786fe9823a78a4357f1d Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Wed, 5 Nov 2003 07:46:20 +0000 Subject: [PATCH] per-player explanation text on options screens --- stepmania/Themes/default/metrics.ini | 39 +++++++- stepmania/src/ScreenOptions.cpp | 126 +++++++++++++++++-------- stepmania/src/ScreenOptions.h | 5 +- stepmania/src/ScreenOptionsMaster.cpp | 2 +- stepmania/src/ScreenProfileOptions.cpp | 7 +- stepmania/src/ScreenRaveOptions.cpp | 3 +- stepmania/src/ThemeManager.cpp | 7 +- 7 files changed, 134 insertions(+), 55 deletions(-) diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index d5fbfad6d0..184b2531ca 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -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 diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index d21cf331e7..1391d02810 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -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; pGetPathToF("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; rGetMetric(m_sName,sLineName); + } + CHECKPOINT; @@ -728,24 +760,40 @@ void ScreenOptions::OnChange() PositionIcons(); UpdateEnabledDisabled(); - for( int pn=0; pnGetMetric(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( "" ); } diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index 94f4e0c566..b1000ea16c 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -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; diff --git a/stepmania/src/ScreenOptionsMaster.cpp b/stepmania/src/ScreenOptionsMaster.cpp index bce299d8d6..9d14f165cb 100644 --- a/stepmania/src/ScreenOptionsMaster.cpp +++ b/stepmania/src/ScreenOptionsMaster.cpp @@ -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() diff --git a/stepmania/src/ScreenProfileOptions.cpp b/stepmania/src/ScreenProfileOptions.cpp index da4575f988..3e702b0e80 100644 --- a/stepmania/src/ScreenProfileOptions.cpp +++ b/stepmania/src/ScreenProfileOptions.cpp @@ -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") ); diff --git a/stepmania/src/ScreenRaveOptions.cpp b/stepmania/src/ScreenRaveOptions.cpp index 67c9da92c9..30e91c1f27 100644 --- a/stepmania/src/ScreenRaveOptions.cpp +++ b/stepmania/src/ScreenRaveOptions.cpp @@ -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() diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 06032781f3..a85012be34 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -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: