From 3bbc0fa9babbc9d492ca8f744719914a27b74233 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 16 Aug 2005 19:57:48 +0000 Subject: [PATCH] demand character graphics as needed, not on CharacterMan's c'tor (because the display isn't yet initialized) --- stepmania/src/Character.cpp | 18 ++++++++++++------ stepmania/src/Character.h | 3 +++ stepmania/src/CharacterManager.cpp | 13 +++++++++++++ stepmania/src/CharacterManager.h | 3 +++ stepmania/src/ScreenTitleMenu.cpp | 5 +++++ 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/stepmania/src/Character.cpp b/stepmania/src/Character.cpp index ebf9d18c24..3327941f88 100644 --- a/stepmania/src/Character.cpp +++ b/stepmania/src/Character.cpp @@ -7,8 +7,6 @@ bool Character::Load( CString sCharDir ) { - m_Preload.UnloadAll(); - // Save character directory if( sCharDir.Right(1) != "/" ) sCharDir += "/"; @@ -36,10 +34,6 @@ bool Character::Load( CString sCharDir ) // get display name (if any) ini.GetValue( "Character", "DisplayName", m_sDisplayName ); - CString sIconPath = GetIconPath(); - if( !sIconPath.empty() ) - m_Preload.Load( sIconPath ); - return true; } @@ -179,6 +173,18 @@ bool Character::Has2DElems() return false; } +void Character::DemandGraphics() +{ + CString s = GetIconPath(); + if( !s.empty() ) + m_Preload.Load( s ); +} + +void Character::UndemandGraphics() +{ + m_Preload.UnloadAll(); +} + // lua start #include "LuaBinding.h" diff --git a/stepmania/src/Character.h b/stepmania/src/Character.h index dc81a4653d..c69817f45f 100644 --- a/stepmania/src/Character.h +++ b/stepmania/src/Character.h @@ -34,6 +34,9 @@ public: return m_sCharacterID.CompareNoCase("default") == 0; } + void DemandGraphics(); + void UndemandGraphics(); + // // Lua // diff --git a/stepmania/src/CharacterManager.cpp b/stepmania/src/CharacterManager.cpp index 0032b58914..b49199856b 100644 --- a/stepmania/src/CharacterManager.cpp +++ b/stepmania/src/CharacterManager.cpp @@ -2,6 +2,7 @@ #include "CharacterManager.h" #include "Character.h" #include "GameState.h" +#include "Foreach.h" #define CHARACTERS_DIR "/Characters/" @@ -78,6 +79,18 @@ Character* CharacterManager::GetDefaultCharacter() return NULL; } +void CharacterManager::DemandGraphics() +{ + FOREACH( Character*, m_pCharacters, c ) + (*c)->DemandGraphics(); +} + +void CharacterManager::UndemandGraphics() +{ + FOREACH( Character*, m_pCharacters, c ) + (*c)->UndemandGraphics(); +} + Character* CharacterManager::GetCharacterFromID( CString sCharacterID ) { for( unsigned i=0; iGetMetric (m_sName,"CoinModeChangeScreen") @@ -49,12 +50,16 @@ void ScreenTitleMenu::Init() this->SortByDrawOrder(); + CHARMAN->DemandGraphics(); + SOUND->PlayOnceFromAnnouncer( "title menu game name" ); } ScreenTitleMenu::~ScreenTitleMenu() { LOG->Trace( "ScreenTitleMenu::~ScreenTitleMenu()" ); + + CHARMAN->UndemandGraphics(); } void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )