Created GameLoop::ChangeGame analogous to GameLoop::ChangeTheme. Changed ChangeTheme to use the AfterThemeChangeScreen metric instead of a passed in screen name from the theme being changed away from. ChangeGame uses the AfterGameChangeScreen and AfterGameAndThemeChangeScreen metrics to pick the screen to load after the change. New metrics are optional and default to InitialScreen. Changed ScreenManager::ThemeChanged to not duplicate the code in ReloadOverlayScreens. Fixed ScreenManager::IsScreenNameValid to check with HasMetric before using GetMetric. Changed game ConfOption logic to set the preference and work in a similar way to the theme ConfOption. Added THEME:SetTheme lua function.

This commit is contained in:
Kyzentun
2014-08-02 00:38:34 -07:00
committed by Jonathan Payne
parent 5828b2529b
commit 9b08ab5b52
13 changed files with 173 additions and 80 deletions
+7 -23
View File
@@ -282,34 +282,14 @@ void ScreenManager::ThemeChanged()
m_soundInvalid.Load( THEME->GetPathS("Common","invalid") );
m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") );
// unload overlay screens
for( unsigned i=0; i<g_OverlayScreens.size(); i++ )
SAFE_DELETE( g_OverlayScreens[i] );
g_OverlayScreens.clear();
// reload overlay screens
RString sOverlays = THEME->GetMetric( "Common","OverlayScreens" );
vector<RString> asOverlays;
split( sOverlays, ",", asOverlays );
for( unsigned i=0; i<asOverlays.size(); i++ )
{
Screen *pScreen = MakeNewScreen( asOverlays[i] );
if(pScreen)
{
LuaThreadVariable var2( "LoadingScreen", pScreen->GetName() );
pScreen->BeginScreen();
g_OverlayScreens.push_back( pScreen );
}
}
// reload song manager colors (to avoid crashes) -aj
SONGMAN->ResetGroupColors();
ReloadOverlayScreens();
// force recreate of new BGA
SAFE_DELETE( g_pSharedBGA );
g_pSharedBGA = new Actor;
this->RefreshCreditsMessages();
}
void ScreenManager::ReloadOverlayScreens()
@@ -369,7 +349,11 @@ bool ScreenManager::AllowOperatorMenuButton() const
bool ScreenManager::IsScreenNameValid(RString const& name) const
{
RString ClassName = THEME->GetMetric(name,"Class");
if(name.empty() || !THEME->HasMetric(name, "Class"))
{
return false;
}
RString ClassName = THEME->GetMetric(name, "Class");
return g_pmapRegistrees->find(ClassName) != g_pmapRegistrees->end();
}