void C4GraphicsSystem::Execute() { // activity check if (!StartDrawing()) return; bool fBGDrawn = false; // If lobby running, message board only (page flip done by startup message board) if (!Game.pGUI || !Game.pGUI->HasFullscreenDialog(true)) // allow for message board behind GUI if(Game.Network.isLobbyActive() || !Game.IsRunning) if (Application.isFullScreen) { // Message board if (iRedrawBackground) ClearFullscreenBackground(); MessageBoard.Execute(); if (!Game.pGUI || !C4GUI::IsActive()) { FinishDrawing(); return; } fBGDrawn = true; } // fullscreen GUI? if (Application.isFullScreen && Game.pGUI && C4GUI::IsActive() && (Game.pGUI->HasFullscreenDialog(false) || !Game.IsRunning)) { if (!fBGDrawn && iRedrawBackground) ClearFullscreenBackground(); Game.pGUI->Render(!fBGDrawn); FinishDrawing(); return; } // Fixed screen rate in old network ScreenRate = 1; // Background redraw if (Application.isFullScreen) if (iRedrawBackground) DrawFullscreenBackground(); // Screen rate skip frame draw ScreenTick++; if (ScreenTick>=ScreenRate) ScreenTick=0; // Reset object audibility Game.Objects.ResetAudibility(); // some hack to ensure the mouse is drawn after a dialog close and before any // movement messages if (Game.pGUI && !C4GUI::IsActive()) SetMouseInGUI(false, false); // Viewports for (C4Viewport *cvp=FirstViewport; cvp; cvp=cvp->Next) cvp->Execute(); if (Application.isFullScreen) { // Upper board UpperBoard.Execute(); // Message board MessageBoard.Execute(); // Help & Messages DrawHelp(); DrawHoldMessages(); DrawFlashMessage(); } // InGame-GUI if (Game.pGUI && C4GUI::IsActive()) { Game.pGUI->Render(false); } // Palette update if (fSetPalette) { SetPalette(); /*SetDarkColorTable();*/ fSetPalette=FALSE; } // gamma update if (fSetGamma) { ApplyGamma(); fSetGamma=FALSE; } // Video record & status (fullsrceen) if (Application.isFullScreen) Video.Execute(); // done FinishDrawing(); }
void C4GraphicsSystem::Execute() { // activity check if (!StartDrawing()) return; bool fBGDrawn = false; // If lobby running, message board only (page flip done by startup message board) if (!::pGUI->HasFullscreenDialog(true)) // allow for message board behind GUI if (::Network.isLobbyActive() || !Game.IsRunning) if (!Application.isEditor) { // Message board if (iRedrawBackground) ClearFullscreenBackground(); MessageBoard->Execute(); if (!C4GUI::IsActive()) { FinishDrawing(); return; } fBGDrawn = true; } // fullscreen GUI? if (!Application.isEditor && C4GUI::IsActive() && (::pGUI->HasFullscreenDialog(false) || !Game.IsRunning)) { if (!fBGDrawn && iRedrawBackground) ClearFullscreenBackground(); ::pGUI->Render(!fBGDrawn); FinishDrawing(); return; } // Reset object audibility ::Objects.ResetAudibility(); // some hack to ensure the mouse is drawn after a dialog close and before any // movement messages if (!C4GUI::IsActive()) ::pGUI->SetMouseInGUI(false, false); // Viewports ::Viewports.Execute(!Application.isEditor && iRedrawBackground); if (iRedrawBackground) --iRedrawBackground; if (!Application.isEditor) { // Upper board UpperBoard.Execute(); // Message board MessageBoard->Execute(); // Help & Messages DrawHelp(); DrawHoldMessages(); DrawFlashMessage(); } // InGame-GUI if (C4GUI::IsActive()) { ::pGUI->Render(false); } // done FinishDrawing(); }