From e41a094ee571adc206dcbf8dfa396ee5b032b6ea Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 2 Oct 2003 01:39:23 +0000 Subject: [PATCH] Move ReadGamePrefsFromDisk() and SaveGamePrefsToDisk() to StepMania.cpp. This is to reduce the dependencies of PrefsManager: code everywhere depends on it, but it depends on code everywhere, resulting in lots of cross-dependencies. (Just a small step to being able to compile smaller bits of the engine for testing.) --- stepmania/src/StepMania.cpp | 55 ++++++++++++++++++++++++++++++++++--- stepmania/src/StepMania.h | 2 ++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 0740cc938b..8e7e7bb0b9 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -188,7 +188,7 @@ void ExitGame() void ResetGame( bool ReturnToFirstScreen ) { GAMESTATE->Reset(); - PREFSMAN->ReadGamePrefsFromDisk(); + ReadGamePrefsFromDisk(); INPUTMAPPER->ReadMappingsFromDisk(); NOTESKIN->RefreshNoteSkinData( GAMESTATE->m_CurGame ); @@ -215,7 +215,7 @@ void ResetGame( bool ReturnToFirstScreen ) THEME->SwitchThemeAndLanguage( "default", THEME->GetCurLanguage() ); TEXTUREMAN->DoDelayedDelete(); } - PREFSMAN->SaveGamePrefsToDisk(); + SaveGamePrefsToDisk(); PREFSMAN->m_bFirstRun = false; @@ -509,6 +509,53 @@ static void RestoreAppPri() #endif } + +#define GAMEPREFS_INI_PATH BASE_PATH "Data" SLASH "GamePrefs.ini" + + +void ReadGamePrefsFromDisk() +{ + if( !GAMESTATE ) + return; + + CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName; + IniFile ini; + ini.SetPath( GAMEPREFS_INI_PATH ); + ini.ReadFile(); // it's OK if this fails + + CString sAnnouncer = sGameName, sTheme = sGameName, sNoteSkin = sGameName; + + // if these calls fail, the three strings will keep the initial values set above. + ini.GetValue( sGameName, "Announcer", sAnnouncer ); + ini.GetValue( sGameName, "Theme", sTheme ); + ini.GetValue( sGameName, "DefaultModifiers", PREFSMAN->m_sDefaultModifiers ); + + // it's OK to call these functions with names that don't exist. + ANNOUNCER->SwitchAnnouncer( sAnnouncer ); + THEME->SwitchThemeAndLanguage( sTheme, PREFSMAN->m_sLanguage ); + +// NOTESKIN->SwitchNoteSkin( sNoteSkin ); +} + +void SaveGamePrefsToDisk() +{ + if( !GAMESTATE ) + return; + + CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName; + IniFile ini; + ini.SetPath( GAMEPREFS_INI_PATH ); + ini.ReadFile(); // it's OK if this fails + + ini.SetValue( sGameName, "Announcer", ANNOUNCER->GetCurAnnouncerName() ); + ini.SetValue( sGameName, "Theme", THEME->GetCurThemeName() ); + ini.SetValue( sGameName, "DefaultModifiers", PREFSMAN->m_sDefaultModifiers ); + + ini.WriteFile(); +} + + + #define UNLOCKS_PATH BASE_PATH "Data" SLASH "Unlocks.dat" @@ -590,7 +637,7 @@ int main(int argc, char* argv[]) /* XXX: Why do we reload global prefs? PREFSMAN loads them in the ctor. -glenn */ PREFSMAN->ReadGlobalPrefsFromDisk( true ); - PREFSMAN->ReadGamePrefsFromDisk(); + ReadGamePrefsFromDisk(); DISPLAY = CreateDisplay(); TEXTUREMAN = new RageTextureManager(); @@ -641,7 +688,7 @@ int main(int argc, char* argv[]) GameLoop(); PREFSMAN->SaveGlobalPrefsToDisk(); - PREFSMAN->SaveGamePrefsToDisk(); + SaveGamePrefsToDisk(); #ifndef DEBUG } diff --git a/stepmania/src/StepMania.h b/stepmania/src/StepMania.h index 0dc83b4faf..17ae25dfa6 100644 --- a/stepmania/src/StepMania.h +++ b/stepmania/src/StepMania.h @@ -15,6 +15,8 @@ int SMmain(int argc, char* argv[]); void ApplyGraphicOptions(); void ExitGame(); void ResetGame( bool ReturnToFirstScreen=true ); +void ReadGamePrefsFromDisk(); +void SaveGamePrefsToDisk(); #if defined(WIN32) extern HWND g_hWndMain;