From 38855e3d9157dd2e14762561d3596f0d62b426f9 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 12 Sep 2003 04:18:43 +0000 Subject: [PATCH] Avoid refreshing note data during gameplay. --- stepmania/src/GameState.cpp | 2 ++ stepmania/src/NoteSkinManager.cpp | 20 +++++++++++++++++--- stepmania/src/NoteSkinManager.h | 1 + 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 93bd2fd238..12af28dd35 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -78,6 +78,8 @@ void GameState::Reset() m_bAllow2ndExtraStage = true; m_bDifficultCourses = false; + NOTESKIN->RefreshNoteSkinData( GAMESTATE->m_CurGame ); + m_iGameSeed = rand(); m_iRoundSeed = rand(); diff --git a/stepmania/src/NoteSkinManager.cpp b/stepmania/src/NoteSkinManager.cpp index 971de80f6a..13fa112155 100644 --- a/stepmania/src/NoteSkinManager.cpp +++ b/stepmania/src/NoteSkinManager.cpp @@ -33,6 +33,7 @@ const CString GLOBAL_BASE_NOTESKIN_DIR = NOTESKINS_DIR + "common" SLASH "default NoteSkinManager::NoteSkinManager() { + m_CurGame = GAME_INVALID; } NoteSkinManager::~NoteSkinManager() @@ -41,6 +42,10 @@ NoteSkinManager::~NoteSkinManager() void NoteSkinManager::RefreshNoteSkinData( Game game ) { + /* Reload even if we don't need to, so exiting out of the menus refreshes the note + * skin list (so you don't have to restart to see new noteskins). */ + m_CurGame = GAMESTATE->m_CurGame; + GameDef* pGameDef = GAMEMAN->GetGameDefForGame( game ); CString sBaseSkinFolder = NOTESKINS_DIR + pGameDef->m_szName + SLASH; @@ -97,7 +102,17 @@ void NoteSkinManager::LoadNoteSkinData( CString sNoteSkinName, NoteSkinData& dat void NoteSkinManager::GetNoteSkinNames( CStringArray &AddTo ) { - GetNoteSkinNames( GAMESTATE->m_CurGame, AddTo ); + /* If the skin data for the current game isn't already load it, load it now. */ + if( m_CurGame != GAMESTATE->m_CurGame ) + RefreshNoteSkinData( GAMESTATE->m_CurGame ); + + /* Don't call GetNoteSkinNames below, since we don't want to call RefreshNoteSkinData; it's + * slow. */ + for( map::const_iterator iter = m_mapNameToData.begin(); + iter != m_mapNameToData.end(); ++iter ) + { + AddTo.push_back( iter->second.sName ); + } } void NoteSkinManager::GetNoteSkinNames( Game game, CStringArray &AddTo ) @@ -105,8 +120,7 @@ void NoteSkinManager::GetNoteSkinNames( Game game, CStringArray &AddTo ) RefreshNoteSkinData( game ); for( map::const_iterator iter = m_mapNameToData.begin(); - iter != m_mapNameToData.end(); - ++iter ) + iter != m_mapNameToData.end(); ++iter ) { AddTo.push_back( iter->second.sName ); } diff --git a/stepmania/src/NoteSkinManager.h b/stepmania/src/NoteSkinManager.h index e0d7d07705..a3b20c6ba6 100644 --- a/stepmania/src/NoteSkinManager.h +++ b/stepmania/src/NoteSkinManager.h @@ -60,6 +60,7 @@ protected: }; void LoadNoteSkinData( CString sNoteSkinName, NoteSkinData& data_out ); map m_mapNameToData; + Game m_CurGame; };