fix screens not being unloaded correctly when not DelayedScreenLoad

This commit is contained in:
Glenn Maynard
2006-01-11 00:59:38 +00:00
parent e16a396868
commit a462b2a640
+22 -5
View File
@@ -634,11 +634,24 @@ void ScreenManager::LoadDelayedScreen()
* loaded, then do this cleanup later; otherwise we'll delete the prepared * loaded, then do this cleanup later; otherwise we'll delete the prepared
* screen.) */ * screen.) */
bool bTimeToDeleteScreens = (g_setGroupedScreens.find(sScreenName) == g_setGroupedScreens.end()); bool bTimeToDeleteScreens = (g_setGroupedScreens.find(sScreenName) == g_setGroupedScreens.end());
if( bTimeToDeleteScreens && PREFSMAN->m_bDelayedScreenLoad && !ScreenIsPrepped(sScreenName) ) vector<Actor*> apActorsToDelete;
if( bTimeToDeleteScreens && !ScreenIsPrepped(sScreenName) )
{
if( PREFSMAN->m_bDelayedScreenLoad )
{ {
bTimeToDeleteScreens = false;
DeletePreparedScreens(); DeletePreparedScreens();
} }
else
{
/* Since DelayedScreenLoad is false, we want to keep the
* old screens in memory until we finish loading the new
* ones, in order to prevent unloading assets and then
* immediately reloading them. However, since the
* screen isn't in the current group, we must remove
* it from the pool before loading the new screen. */
GrabPreparedActors( apActorsToDelete );
}
}
// Load the screen, if it's not already prepared. // Load the screen, if it's not already prepared.
PrepareScreen( sScreenName ); PrepareScreen( sScreenName );
@@ -702,9 +715,13 @@ void ScreenManager::LoadDelayedScreen()
if( bWasOnSystemMenu && !bIsOnSystemMenu ) if( bWasOnSystemMenu && !bIsOnSystemMenu )
PREFSMAN->SavePrefsToDisk(); PREFSMAN->SavePrefsToDisk();
bTimeToDeleteScreens = (g_setGroupedScreens.find(sScreenName) == g_setGroupedScreens.end()); if( !apActorsToDelete.empty() )
if( bTimeToDeleteScreens ) {
DeletePreparedScreens(); BeforeDeleteScreen();
FOREACH( Actor*, apActorsToDelete, a )
SAFE_DELETE( *a );
AfterDeleteScreen();
}
LOG->Trace("... PushScreen"); LOG->Trace("... PushScreen");
PushLoadedScreen( ls ); PushLoadedScreen( ls );