diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 7925f5fa0d..403cc137db 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -1645,10 +1645,12 @@ TimerSeconds=0 [ScreenSystemLayer] StatsX=632 StatsY=10 -CreditsP1X=120 -CreditsP1Y=474 -CreditsP2X=520 -CreditsP2Y=474 +PlayerInfoP1X=120 +PlayerInfoP1Y=474 +PlayerInfoP2X=520 +PlayerInfoP2Y=474 +CreditsX=320 +CreditsY=474 CreditsColor=1,1,1,1 CreditsShadowLength=0 CreditsZoom=1.0 diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index c829336899..2bd96a5d3e 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -39,10 +39,11 @@ ScreenManager* SCREENMAN = NULL; // global and accessable from anywhere in our p #define CREDITS_COLOR THEME->GetMetricC("ScreenSystemLayer","CreditsColor") #define CREDITS_SHADOW_LENGTH THEME->GetMetricF("ScreenSystemLayer","CreditsShadowLength") #define CREDITS_ZOOM THEME->GetMetricF("ScreenSystemLayer","CreditsZoom") -#define CREDITS_TEXT_HOME_JOIN THEME->GetMetric ("ScreenSystemLayer","CreditsTextHomeJoin") -#define CREDITS_TEXT_HOME_JOINED THEME->GetMetric ("ScreenSystemLayer","CreditsTextHomeJoined") -#define CREDITS_TEXT_HOME_TOO_LATE THEME->GetMetric ("ScreenSystemLayer","CreditsTextHomeTooLate") -#define CREDITS_TEXT_PAY THEME->GetMetric ("ScreenSystemLayer","CreditsTextPay") +#define CREDITS_TEXT_PRESS_START THEME->GetMetric ("ScreenSystemLayer","CreditsTextPressStart") +#define CREDITS_TEXT_JOINED THEME->GetMetric ("ScreenSystemLayer","CreditsTextJoined") +#define CREDITS_TEXT_TOO_LATE THEME->GetMetric ("ScreenSystemLayer","CreditsTextTooLate") +#define CREDITS_TEXT_INSERT_MORE THEME->GetMetric ("ScreenSystemLayer","CreditsTextInsertMore") +#define CREDITS_TEXT_CREDITS THEME->GetMetric ("ScreenSystemLayer","CreditsTextCredits") #define CREDITS_TEXT_FREE THEME->GetMetric ("ScreenSystemLayer","CreditsTextFree") const int NUM_SKIPS = 5; @@ -53,7 +54,8 @@ class ScreenSystemLayer: public Screen { BitmapText m_textStats; BitmapText m_textSystemMessage; - BitmapText m_textCreditInfo[NUM_PLAYERS]; + BitmapText m_textPlayerInfo[NUM_PLAYERS]; + BitmapText m_textCredits; BitmapText m_textSysTime; BitmapText m_Skips[NUM_SKIPS]; int m_LastSkip; @@ -99,9 +101,11 @@ ScreenSystemLayer::ScreenSystemLayer() : Screen("ScreenSystemLayer") for( int p=0; pAddChild(&m_textCreditInfo[p]); + this->AddChild(&m_textPlayerInfo[p]); } + this->AddChild(&m_textCredits); + /* "Was that a skip?" This displays a message when an update takes * abnormally long, to quantify skips more precisely, verify them * when they're subtle, and show the time it happened, so you can pinpoint @@ -147,48 +151,68 @@ void ScreenSystemLayer::SystemMessage( CString sMessage ) void ScreenSystemLayer::RefreshCreditsMessages() { + m_textCredits.LoadFromFont( THEME->GetPathToF("ScreenManager credits") ); + m_textCredits.SetName( "Credits" ); + SET_XY( &m_textCredits ); + m_textCredits.SetZoom( CREDITS_ZOOM ); + m_textCredits.SetDiffuse( CREDITS_COLOR ); + m_textCredits.SetShadowLength( CREDITS_SHADOW_LENGTH ); + + CString sCredits; + switch( PREFSMAN->m_iCoinMode ) + { + case COIN_HOME: + sCredits = ""; + break; + case COIN_PAY: + { + int Coins = GAMESTATE->m_iCoins % PREFSMAN->m_iCoinsPerCredit; + sCredits = ssprintf("%s %d", CREDITS_TEXT_CREDITS.c_str(), GAMESTATE->m_iCoins / PREFSMAN->m_iCoinsPerCredit); + if (Coins) + sCredits += ssprintf(" %d/%d", Coins, PREFSMAN->m_iCoinsPerCredit ); + } + break; + case COIN_FREE: + sCredits = CREDITS_TEXT_FREE; + break; + default: + ASSERT(0); + } + m_textCredits.SetText( sCredits ); + + // update joined for( int p=0; pGetPathToF("ScreenManager credits") ); - m_textCreditInfo[p].SetName( ssprintf("CreditsP%d",p+1 ) ); - SET_XY( &m_textCreditInfo[p] ); - m_textCreditInfo[p].SetZoom( CREDITS_ZOOM ); - m_textCreditInfo[p].SetDiffuse( CREDITS_COLOR ); - m_textCreditInfo[p].SetShadowLength( CREDITS_SHADOW_LENGTH ); + m_textPlayerInfo[p].LoadFromFont( THEME->GetPathToF("ScreenManager credits") ); + m_textPlayerInfo[p].SetName( ssprintf("PlayerInfoP%d",p+1 ) ); + SET_XY( &m_textPlayerInfo[p] ); + m_textPlayerInfo[p].SetZoom( CREDITS_ZOOM ); + m_textPlayerInfo[p].SetDiffuse( CREDITS_COLOR ); + m_textPlayerInfo[p].SetShadowLength( CREDITS_SHADOW_LENGTH ); - CString sText; - switch( PREFSMAN->m_iCoinMode ) + CString sPlayerInfo; + if( GAMESTATE->m_bSideIsJoined[p] ) { - case COIN_HOME: - if( GAMESTATE->m_bSideIsJoined[p] ) - sText = CREDITS_TEXT_HOME_JOINED; - else if( GAMESTATE->m_bPlayersCanJoin ) // would (GAMESTATE->m_CurStyle!=STYLE_INVALID) do the same thing? - sText = CREDITS_TEXT_HOME_JOIN; + sPlayerInfo = CREDITS_TEXT_JOINED; + } + else if( GAMESTATE->m_bPlayersCanJoin ) + { + if( PREFSMAN->m_iCoinMode==COIN_PAY && GAMESTATE->m_iCoinsm_iCoinsPerCredit ) + sPlayerInfo = CREDITS_TEXT_INSERT_MORE; else - sText = CREDITS_TEXT_HOME_TOO_LATE; - break; - case COIN_PAY: - { - int Coins = GAMESTATE->m_iCoins % PREFSMAN->m_iCoinsPerCredit; - CString txt = ssprintf("%s %d", CREDITS_TEXT_PAY.c_str(), GAMESTATE->m_iCoins / PREFSMAN->m_iCoinsPerCredit); - if (Coins) - txt += ssprintf(" %d/%d", Coins, PREFSMAN->m_iCoinsPerCredit ); - sText = txt; - } - break; - case COIN_FREE: - sText = CREDITS_TEXT_FREE; - break; - default: - ASSERT(0); + sPlayerInfo = CREDITS_TEXT_PRESS_START; + } + else + { + sPlayerInfo = CREDITS_TEXT_TOO_LATE; } Profile* pProfile = PROFILEMAN->GetProfile( (PlayerNumber)p ); if( pProfile ) - sText += " " + pProfile->m_sName; + sPlayerInfo += " " + pProfile->m_sName; - m_textCreditInfo[p].SetText( sText ); + m_textPlayerInfo[p].SetText( sPlayerInfo ); } } diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 2c4e0f8050..0ccd116488 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -396,9 +396,14 @@ void ThemeManager::ReloadMetricsIfNecessary() if( m_uHashForCurThemeMetrics != GetHashForFile(sCurMetricPath) || m_uHashForBaseThemeMetrics != GetHashForFile(sDefaultMetricPath) ) { - SwitchThemeAndLanguage(m_sCurThemeName, m_sCurLanguage); // force a reload of the metrics cache - SCREENMAN->SystemMessage( "Reloaded metrics" ); + ReloadMetrics(); } +} + +void ThemeManager::ReloadMetrics() +{ + SwitchThemeAndLanguage(m_sCurThemeName, m_sCurLanguage); // force a reload of the metrics cache + SCREENMAN->SystemMessage( "Reloaded metrics" ); // // clear theme path cache @@ -428,7 +433,7 @@ try_metric_again: break; // fall through case ArchHooks::retry: FlushDirCache(); - ReloadMetricsIfNecessary(); + ReloadMetrics(); goto try_metric_again; case ArchHooks::ignore: return ""; diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index fe1ebf6171..10bbf4dd76 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -34,6 +34,7 @@ public: CString GetCurLanguage() { return m_sCurLanguage; }; CString GetCurThemeDir() { return GetThemeDirFromName(m_sCurThemeName); }; void NextTheme(); + void ReloadMetrics(); void ReloadMetricsIfNecessary(); CString GetPathTo( ElementCategory category, CString sFileName, bool bOptional=false );