fix screens not being unloaded correctly when not DelayedScreenLoad
This commit is contained in:
@@ -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 );
|
||||||
|
|||||||
Reference in New Issue
Block a user