fix crash going from gameplay to how to play with delayed screen loads off
This commit is contained in:
@@ -1146,8 +1146,15 @@ void ScreenGameplay::Update( float fDeltaTime )
|
|||||||
else
|
else
|
||||||
Screen::Update( fDeltaTime );
|
Screen::Update( fDeltaTime );
|
||||||
|
|
||||||
|
/* This happens if ScreenDemonstration::HandleScreenMessage sets a new screen when
|
||||||
|
* PREFSMAN->m_bDelayedScreenLoad. */
|
||||||
if( GAMESTATE->m_pCurSong == NULL )
|
if( GAMESTATE->m_pCurSong == NULL )
|
||||||
return;
|
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 )
|
if( GAMESTATE->m_MasterPlayerNumber != PLAYER_INVALID )
|
||||||
m_MaxCombo.SetText( ssprintf("%d", g_CurStageStats.iMaxCombo[GAMESTATE->m_MasterPlayerNumber]) ); /* MAKE THIS WORK FOR BOTH PLAYERS! */
|
m_MaxCombo.SetText( ssprintf("%d", g_CurStageStats.iMaxCombo[GAMESTATE->m_MasterPlayerNumber]) ); /* MAKE THIS WORK FOR BOTH PLAYERS! */
|
||||||
|
|||||||
@@ -371,6 +371,13 @@ void ScreenManager::EmptyDeleteQueue()
|
|||||||
TEXTUREMAN->DiagnosticOutput();
|
TEXTUREMAN->DiagnosticOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Screen *ScreenManager::GetTopScreen()
|
||||||
|
{
|
||||||
|
if( m_ScreenStack.empty() )
|
||||||
|
return NULL;
|
||||||
|
return m_ScreenStack[m_ScreenStack.size()-1];
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenManager::Update( float fDeltaTime )
|
void ScreenManager::Update( float fDeltaTime )
|
||||||
{
|
{
|
||||||
// Only update the topmost screen on the stack.
|
// Only update the topmost screen on the stack.
|
||||||
@@ -392,7 +399,7 @@ void ScreenManager::Update( float fDeltaTime )
|
|||||||
|
|
||||||
if( !m_ScreenStack.empty() )
|
if( !m_ScreenStack.empty() )
|
||||||
{
|
{
|
||||||
Screen* pScreen = m_ScreenStack[m_ScreenStack.size()-1];
|
Screen* pScreen = GetTopScreen();
|
||||||
if( pScreen->IsFirstUpdate() )
|
if( pScreen->IsFirstUpdate() )
|
||||||
pScreen->Update( 0 );
|
pScreen->Update( 0 );
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ public:
|
|||||||
|
|
||||||
void LoadDelayedScreen();
|
void LoadDelayedScreen();
|
||||||
|
|
||||||
|
Screen *GetTopScreen();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
vector<Screen*> m_ScreenStack; // bottommost to topmost
|
vector<Screen*> m_ScreenStack; // bottommost to topmost
|
||||||
ScreenMessage m_MessageSendOnPop;
|
ScreenMessage m_MessageSendOnPop;
|
||||||
|
|||||||
Reference in New Issue
Block a user