Use range-based for loops in ScreenManager.cpp

Modernizing some of the old code - improve reliability by replacing traditional iterator loops where they are not needed.

Update ScreenManager.cpp
This commit is contained in:
sukibaby
2024-05-08 01:55:51 -07:00
committed by teejusb
parent f7a7252dbb
commit eb8b428d0f
+36 -38
View File
@@ -262,23 +262,25 @@ ScreenManager::ScreenManager()
ScreenManager::~ScreenManager() ScreenManager::~ScreenManager()
{ {
LOG->Trace( "ScreenManager::~ScreenManager()" ); LOG->Trace("ScreenManager::~ScreenManager()");
LOG->UnmapLog( "ScreenManager::TopScreen" ); LOG->UnmapLog("ScreenManager::TopScreen");
SAFE_DELETE( g_pSharedBGA ); SAFE_DELETE(g_pSharedBGA);
for( unsigned i=0; i<g_ScreenStack.size(); i++ ) for (LoadedScreen& screen : g_ScreenStack)
{ {
if( g_ScreenStack[i].m_bDeleteWhenDone ) if (screen.m_bDeleteWhenDone)
SAFE_DELETE( g_ScreenStack[i].m_pScreen ); SAFE_DELETE(screen.m_pScreen);
} }
g_ScreenStack.clear(); g_ScreenStack.clear();
DeletePreparedScreens(); DeletePreparedScreens();
for( unsigned i=0; i<g_OverlayScreens.size(); i++ ) for (Screen* overlayScreen : g_OverlayScreens)
SAFE_DELETE( g_OverlayScreens[i] ); {
SAFE_DELETE(overlayScreen);
}
g_OverlayScreens.clear(); g_OverlayScreens.clear();
// Unregister with Lua. // Unregister with Lua.
LUA->UnsetGlobal( "SCREENMAN" ); LUA->UnsetGlobal("SCREENMAN");
} }
// This is called when we start up, and when the theme changes or is reloaded. // This is called when we start up, and when the theme changes or is reloaded.
@@ -306,22 +308,22 @@ void ScreenManager::ThemeChanged()
void ScreenManager::ReloadOverlayScreens() void ScreenManager::ReloadOverlayScreens()
{ {
// unload overlay screens // unload overlay screens
for( unsigned i=0; i<g_OverlayScreens.size(); i++ ) for (Screen* screen : g_OverlayScreens)
SAFE_DELETE( g_OverlayScreens[i] ); SAFE_DELETE(screen);
g_OverlayScreens.clear(); g_OverlayScreens.clear();
// reload overlay screens // reload overlay screens
RString sOverlays = THEME->GetMetric( "Common","OverlayScreens" ); RString sOverlays = THEME->GetMetric("Common", "OverlayScreens");
std::vector<RString> asOverlays; std::vector<RString> asOverlays;
split( sOverlays, ",", asOverlays ); split(sOverlays, ",", asOverlays);
for( unsigned i=0; i<asOverlays.size(); i++ ) for (const RString& overlay : asOverlays)
{ {
Screen *pScreen = MakeNewScreen( asOverlays[i] ); Screen* pScreen = MakeNewScreen(overlay);
if(pScreen) if (pScreen)
{ {
LuaThreadVariable var2( "LoadingScreen", pScreen->GetName() ); LuaThreadVariable var2("LoadingScreen", pScreen->GetName());
pScreen->BeginScreen(); pScreen->BeginScreen();
g_OverlayScreens.push_back( pScreen ); g_OverlayScreens.push_back(pScreen);
} }
} }
@@ -459,23 +461,21 @@ void ScreenManager::Update( float fDeltaTime )
/* Loading a new screen can take seconds and cause a big jump on the new /* Loading a new screen can take seconds and cause a big jump on the new
* Screen's first update. Clamp the first update delta so that the * Screen's first update. Clamp the first update delta so that the
* animations don't jump. */ * animations don't jump. */
if( pScreen && m_bZeroNextUpdate ) if (pScreen && m_bZeroNextUpdate)
{ {
LOG->Trace( "Zeroing this update. Was %f", fDeltaTime ); LOG->Trace("Zeroing this update. Was %f", fDeltaTime);
fDeltaTime = 0; fDeltaTime = 0;
m_bZeroNextUpdate = false; m_bZeroNextUpdate = false;
} }
// Update screens. // Update screens.
{ for (const LoadedScreen& screen : g_ScreenStack)
for( unsigned i=0; i<g_ScreenStack.size(); i++ ) screen.m_pScreen->Update(fDeltaTime);
g_ScreenStack[i].m_pScreen->Update( fDeltaTime );
g_pSharedBGA->Update( fDeltaTime ); g_pSharedBGA->Update(fDeltaTime);
for( unsigned i=0; i<g_OverlayScreens.size(); i++ ) for (Screen* overlay : g_OverlayScreens)
g_OverlayScreens[i]->Update( fDeltaTime ); overlay->Update(fDeltaTime);
}
/* The music may be started on the first update. If we're reading from a CD, /* The music may be started on the first update. If we're reading from a CD,
* it might not start immediately. Make sure we start playing the sound before * it might not start immediately. Make sure we start playing the sound before
@@ -509,12 +509,11 @@ void ScreenManager::Draw()
g_pSharedBGA->Draw(); g_pSharedBGA->Draw();
DISPLAY->CameraPopMatrix(); DISPLAY->CameraPopMatrix();
for( unsigned i=0; i<g_ScreenStack.size(); i++ ) // Draw all screens bottom to top for (const LoadedScreen& screen : g_ScreenStack) // Draw all screens bottom to top
g_ScreenStack[i].m_pScreen->Draw(); screen.m_pScreen->Draw();
for( unsigned i=0; i<g_OverlayScreens.size(); i++ )
g_OverlayScreens[i]->Draw();
for (Screen* overlayScreen : g_OverlayScreens)
overlayScreen->Draw();
DISPLAY->EndFrame(); DISPLAY->EndFrame();
} }
@@ -527,19 +526,18 @@ void ScreenManager::Input( const InputEventPlus &input )
// First, give overlay screens a shot at the input. If Input returns // First, give overlay screens a shot at the input. If Input returns
// true, it handled the input, so don't pass it further. // true, it handled the input, so don't pass it further.
for( unsigned i = 0; i < g_OverlayScreens.size(); ++i ) for (Screen* pScreen : g_OverlayScreens)
{ {
Screen *pScreen = g_OverlayScreens[i]; bool handled = pScreen->Input(input);
bool handled= pScreen->Input(input);
// Pass input to the screen and lua. Contention shouldn't be a problem // Pass input to the screen and lua. Contention shouldn't be a problem
// because anybody setting an input callback is probably doing it to // because anybody setting an input callback is probably doing it to
// do something in addition to whatever the screen does. // do something in addition to whatever the screen does.
if(pScreen->PassInputToLua(input) || handled) if (pScreen->PassInputToLua(input) || handled)
{ {
if(m_bReloadOverlayScreensAfterInput) if (m_bReloadOverlayScreensAfterInput)
{ {
ReloadOverlayScreens(); ReloadOverlayScreens();
m_bReloadOverlayScreensAfterInput= false; m_bReloadOverlayScreensAfterInput = false;
} }
return; return;
} }