From 1ddf7f57da67113fded512c6f7a0f084876b50aa Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 13 Jul 2005 06:51:08 +0000 Subject: [PATCH] use ConcurrentlyPrepareScreen --- stepmania/src/ScreenSelect.cpp | 2 ++ stepmania/src/ScreenStage.cpp | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/stepmania/src/ScreenSelect.cpp b/stepmania/src/ScreenSelect.cpp index 2c311e46f6..042a49c6c3 100644 --- a/stepmania/src/ScreenSelect.cpp +++ b/stepmania/src/ScreenSelect.cpp @@ -205,6 +205,8 @@ void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) const int iSelectionIndex = GetSelectionIndex(GAMESTATE->m_MasterPlayerNumber); m_sNextScreen = NEXT_SCREEN(iSelectionIndex); } + + SCREENMAN->ConcurrentlyPrepareScreen( m_sNextScreen ); } else if( SM == SM_AllDoneChoosing ) /* It's our turn to tween out. */ { diff --git a/stepmania/src/ScreenStage.cpp b/stepmania/src/ScreenStage.cpp index 257ba3c509..62bffa42a6 100644 --- a/stepmania/src/ScreenStage.cpp +++ b/stepmania/src/ScreenStage.cpp @@ -51,9 +51,6 @@ void ScreenStage::Init() m_Cancel.SetDrawOrder( DRAW_ORDER_TRANSITIONS ); this->AddChild( &m_Cancel ); - /* Prep the new screen once m_In is complete. */ - this->PostScreenMessage( SM_PrepScreen, m_sprOverlay->GetTweenTimeLeft() ); - SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage "+StageToString(GAMESTATE->GetCurrentStage())) ); this->SortByDrawOrder(); @@ -74,6 +71,12 @@ void ScreenStage::HandleScreenMessage( const ScreenMessage SM ) } else if( SM == SM_BeginFadingOut ) { + if( SCREENMAN->IsConcurrentlyLoading() || m_sprOverlay->GetTweenTimeLeft() ) + return; + + /* Clear any other SM_BeginFadingOut messages. */ + this->ClearMessageQueue( SM_BeginFadingOut ); + m_Out.StartTransitioning(); this->PostScreenMessage( SM_GoToNextScreen, this->GetTweenTimeLeft() ); return; @@ -84,6 +87,20 @@ void ScreenStage::HandleScreenMessage( const ScreenMessage SM ) void ScreenStage::Update( float fDeltaTime ) { + if( this->IsFirstUpdate() ) + { + if( SCREENMAN->ConcurrentlyPrepareScreen(NEXT_SCREEN, SM_BeginFadingOut) ) + { + /* Continue when both the screen finishes loading and the tween finishes. */ + this->PostScreenMessage( SM_BeginFadingOut, m_sprOverlay->GetTweenTimeLeft() ); + } + else + { + /* Prep the new screen once m_In is complete. */ + this->PostScreenMessage( SM_PrepScreen, m_sprOverlay->GetTweenTimeLeft() ); + } + } + if( m_bZeroDeltaOnNextUpdate ) { m_bZeroDeltaOnNextUpdate = false;