fix crash going from gameplay to how to play with delayed screen loads off

This commit is contained in:
Glenn Maynard
2004-02-16 05:30:31 +00:00
parent 47bf1ef190
commit b665a81749
3 changed files with 17 additions and 1 deletions
+7
View File
@@ -1146,8 +1146,15 @@ void ScreenGameplay::Update( float fDeltaTime )
else
Screen::Update( fDeltaTime );
/* This happens if ScreenDemonstration::HandleScreenMessage sets a new screen when
* PREFSMAN->m_bDelayedScreenLoad. */
if( GAMESTATE->m_pCurSong == NULL )
return;
/* This can happen if ScreenDemonstration::HandleScreenMessage sets a new screen when
* !PREFSMAN->m_bDelayedScreenLoad. (The new screen was loaded when we called Screen::Update,
* and the ctor might set a new GAMESTATE->m_pCurSong, so the above check can fail.) */
if( SCREENMAN->GetTopScreen() != this )
return;
if( GAMESTATE->m_MasterPlayerNumber != PLAYER_INVALID )
m_MaxCombo.SetText( ssprintf("%d", g_CurStageStats.iMaxCombo[GAMESTATE->m_MasterPlayerNumber]) ); /* MAKE THIS WORK FOR BOTH PLAYERS! */
+8 -1
View File
@@ -371,6 +371,13 @@ void ScreenManager::EmptyDeleteQueue()
TEXTUREMAN->DiagnosticOutput();
}
Screen *ScreenManager::GetTopScreen()
{
if( m_ScreenStack.empty() )
return NULL;
return m_ScreenStack[m_ScreenStack.size()-1];
}
void ScreenManager::Update( float fDeltaTime )
{
// Only update the topmost screen on the stack.
@@ -392,7 +399,7 @@ void ScreenManager::Update( float fDeltaTime )
if( !m_ScreenStack.empty() )
{
Screen* pScreen = m_ScreenStack[m_ScreenStack.size()-1];
Screen* pScreen = GetTopScreen();
if( pScreen->IsFirstUpdate() )
pScreen->Update( 0 );
else
+2
View File
@@ -59,6 +59,8 @@ public:
void LoadDelayedScreen();
Screen *GetTopScreen();
private:
vector<Screen*> m_ScreenStack; // bottommost to topmost
ScreenMessage m_MessageSendOnPop;