simplify. Don't separate "next" and "cancel" as much: to cancel, set the next screen to PREV_SCREEN, and use SM_GoToNextScreen.
This commit is contained in:
@@ -72,7 +72,6 @@ void Screen::BeginScreen()
|
||||
/* Screens set these when they determine their next screen dynamically. Reset them
|
||||
* here, so a reused screen doesn't inherit these from the last time it was used. */
|
||||
m_sNextScreen = RString();
|
||||
m_sPrevScreen = RString();
|
||||
|
||||
this->RunCommands( THEME->GetMetricA(m_sName, "ScreenOnCommand") );
|
||||
}
|
||||
@@ -213,20 +212,13 @@ void Screen::HandleScreenMessage( const ScreenMessage SM )
|
||||
FOREACH_HumanPlayer(p)
|
||||
MenuStart( p );
|
||||
}
|
||||
else if( SM == SM_GoToNextScreen )
|
||||
else if( SM == SM_GoToNextScreen || SM == SM_GoToPrevScreen )
|
||||
{
|
||||
if( SCREENMAN->IsStackedScreen(this) )
|
||||
SCREENMAN->PopTopScreen( m_smSendOnPop );
|
||||
else
|
||||
SCREENMAN->SetNewScreen( GetNextScreen() );
|
||||
}
|
||||
else if( SM == SM_GoToPrevScreen )
|
||||
{
|
||||
if( SCREENMAN->IsStackedScreen(this) )
|
||||
SCREENMAN->PopTopScreen( m_smSendOnPop );
|
||||
else
|
||||
SCREENMAN->SetNewScreen( GetPrevScreen() );
|
||||
}
|
||||
}
|
||||
|
||||
RString Screen::GetNextScreen() const
|
||||
@@ -238,8 +230,6 @@ RString Screen::GetNextScreen() const
|
||||
|
||||
RString Screen::GetPrevScreen() const
|
||||
{
|
||||
if( !m_sPrevScreen.empty() )
|
||||
return m_sPrevScreen;
|
||||
return PREV_SCREEN;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,8 +81,8 @@ protected:
|
||||
RString GetNextScreen() const;
|
||||
RString GetPrevScreen() const;
|
||||
|
||||
// If these are left blank, the NextScreen and PrevScreen metrics will be used.
|
||||
RString m_sNextScreen, m_sPrevScreen;
|
||||
// If left blank, the NextScreen metric will be used.
|
||||
RString m_sNextScreen;
|
||||
ScreenMessage m_smSendOnPop;
|
||||
|
||||
public:
|
||||
|
||||
@@ -2500,6 +2500,8 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
||||
|
||||
GAMESTATE->CancelStage();
|
||||
|
||||
m_sNextScreen = GetPrevScreen();
|
||||
|
||||
if( AdjustSync::IsSyncDataChanged() )
|
||||
ScreenSaveSync::PromptSaveSync( SM_GoToPrevScreen );
|
||||
else
|
||||
|
||||
@@ -107,6 +107,7 @@ void ScreenStage::MenuBack( PlayerNumber pn )
|
||||
return;
|
||||
|
||||
this->ClearMessageQueue();
|
||||
m_sNextScreen = GetPrevScreen();
|
||||
m_Cancel.StartTransitioning( SM_GoToPrevScreen );
|
||||
|
||||
/* If a Back is buffered while we're prepping the screen (very common), we'll
|
||||
|
||||
@@ -285,6 +285,8 @@ void ScreenWithMenuElements::TweenOffScreen()
|
||||
|
||||
void ScreenWithMenuElements::Cancel( ScreenMessage smSendWhenDone )
|
||||
{
|
||||
m_sNextScreen = GetPrevScreen();
|
||||
|
||||
if( CANCEL_TRANSITIONS_OUT )
|
||||
{
|
||||
SCREENMAN->PlayCancelSound();
|
||||
|
||||
Reference in New Issue
Block a user