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
+23 -6
View File
@@ -634,10 +634,23 @@ 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) )
{ {
bTimeToDeleteScreens = false; if( PREFSMAN->m_bDelayedScreenLoad )
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.
@@ -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 );