generic screen popping: pop if pushed, instead of NEXT_SCREEN
This commit is contained in:
@@ -150,10 +150,16 @@ void Screen::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
MenuStart( p );
|
MenuStart( p );
|
||||||
break;
|
break;
|
||||||
case SM_GoToNextScreen:
|
case SM_GoToNextScreen:
|
||||||
|
if( SCREENMAN->IsStackedScreen(this) )
|
||||||
|
SCREENMAN->PopTopScreen();
|
||||||
|
else
|
||||||
SCREENMAN->SetNewScreen( NEXT_SCREEN );
|
SCREENMAN->SetNewScreen( NEXT_SCREEN );
|
||||||
break;
|
break;
|
||||||
case SM_GoToPrevScreen:
|
case SM_GoToPrevScreen:
|
||||||
SCREENMAN->DeletePreparedScreens();
|
SCREENMAN->DeletePreparedScreens();
|
||||||
|
if( SCREENMAN->IsStackedScreen(this) )
|
||||||
|
SCREENMAN->PopTopScreen();
|
||||||
|
else
|
||||||
SCREENMAN->SetNewScreen( PREV_SCREEN );
|
SCREENMAN->SetNewScreen( PREV_SCREEN );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,15 @@ Screen *ScreenManager::GetTopScreen()
|
|||||||
return m_ScreenStack[m_ScreenStack.size()-1];
|
return m_ScreenStack[m_ScreenStack.size()-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ScreenManager::IsStackedScreen( const Screen *pScreen ) const
|
||||||
|
{
|
||||||
|
/* True if the screen is in the screen stack, but not the first. */
|
||||||
|
for( unsigned i = 1; i < m_ScreenStack.size(); ++i )
|
||||||
|
if( m_ScreenStack[i] == pScreen )
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
@@ -63,6 +63,11 @@ public:
|
|||||||
|
|
||||||
Screen *GetTopScreen();
|
Screen *GetTopScreen();
|
||||||
|
|
||||||
|
/* Return true if the given screen is in the main screen stack, but not the bottommost
|
||||||
|
* screen. If true, the screen should usually exit by popping itself, not by loading
|
||||||
|
* another screen. */
|
||||||
|
bool IsStackedScreen( const Screen *pScreen ) const;
|
||||||
|
|
||||||
// Lua
|
// Lua
|
||||||
void PushSelf( lua_State *L );
|
void PushSelf( lua_State *L );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user