generic screen popping: pop if pushed, instead of NEXT_SCREEN

This commit is contained in:
Glenn Maynard
2005-03-08 03:52:18 +00:00
parent 31cb7efb3a
commit 2404ff1641
3 changed files with 22 additions and 2 deletions
+8 -2
View File
@@ -150,11 +150,17 @@ void Screen::HandleScreenMessage( const ScreenMessage SM )
MenuStart( p );
break;
case SM_GoToNextScreen:
SCREENMAN->SetNewScreen( NEXT_SCREEN );
if( SCREENMAN->IsStackedScreen(this) )
SCREENMAN->PopTopScreen();
else
SCREENMAN->SetNewScreen( NEXT_SCREEN );
break;
case SM_GoToPrevScreen:
SCREENMAN->DeletePreparedScreens();
SCREENMAN->SetNewScreen( PREV_SCREEN );
if( SCREENMAN->IsStackedScreen(this) )
SCREENMAN->PopTopScreen();
else
SCREENMAN->SetNewScreen( PREV_SCREEN );
break;
}
}
+9
View File
@@ -137,6 +137,15 @@ Screen *ScreenManager::GetTopScreen()
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 )
{
// Only update the topmost screen on the stack.
+5
View File
@@ -63,6 +63,11 @@ public:
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
void PushSelf( lua_State *L );