From f9316d9cc3cfb748366758c41cf02634b6df9a08 Mon Sep 17 00:00:00 2001 From: erorcun Date: Tue, 7 Jan 2020 17:23:09 +0300 Subject: CPlayerPed & CMenuManager (#286) Make Frontend great again! --- src/core/main.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 13 deletions(-) (limited to 'src/core/main.cpp') diff --git a/src/core/main.cpp b/src/core/main.cpp index 8ac16d0e..2f266a9e 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -141,9 +141,29 @@ Idle(void *arg) CTimer::Update(); CSprite2d::InitPerFrame(); CFont::InitPerFrame(); + + // We're basically merging FrontendIdle and Idle (just like TheGame on PS2) +#ifdef PS2_SAVE_DIALOG + // Only exists on PC FrontendIdle, probably some PS2 bug fix + if (FrontEndMenuManager.m_bMenuActive) + CSprite2d::SetRecipNearClip(); + + if (FrontEndMenuManager.m_bGameNotLoaded) { + CPad::UpdatePads(); + FrontEndMenuManager.Process(); + } else { + CPointLights::InitPerFrame(); + CGame::Process(); + DMAudio.Service(); + } + + if (RsGlobal.quit) + return; +#else CPointLights::InitPerFrame(); CGame::Process(); DMAudio.Service(); +#endif if(CGame::bDemoMode && CTimer::GetTimeInMilliseconds() > (3*60 + 30)*1000 && !CCutsceneMgr::IsCutsceneProcessing()){ FrontEndMenuManager.m_bStartGameLoading = true; @@ -159,14 +179,16 @@ Idle(void *arg) if(arg == nil) return; - if((!FrontEndMenuManager.m_bMenuActive || FrontEndMenuManager.field_452 == 1) && + if((!FrontEndMenuManager.m_bMenuActive || FrontEndMenuManager.m_bRenderGameInMenu) && TheCamera.GetScreenFadeStatus() != FADE_2){ #ifdef GTA_PC - // This is from SA, but it's nice for windowed mode - RwV2d pos; - pos.x = SCREEN_WIDTH/2.0f; - pos.y = SCREEN_HEIGHT/2.0f; - RsMouseSetPos(&pos); + if (!FrontEndMenuManager.m_bRenderGameInMenu) { + // This is from SA, but it's nice for windowed mode + RwV2d pos; + pos.x = SCREEN_WIDTH / 2.0f; + pos.y = SCREEN_HEIGHT / 2.0f; + RsMouseSetPos(&pos); + } #endif CRenderer::ConstructRenderList(); CRenderer::PreRender(); @@ -210,6 +232,10 @@ Idle(void *arg) return; } +#ifdef PS2_SAVE_DIALOG + if (FrontEndMenuManager.m_bMenuActive) + DefinedState(); +#endif RenderMenus(); DoFade(); Render2dStuffAfterFade(); @@ -228,7 +254,7 @@ FrontendIdle(void) #endif CTimer::Update(); - CSprite2d::SetRecipNearClip(); + CSprite2d::SetRecipNearClip(); // this should be on InitialiseRenderWare according to PS2 asm. seems like a bug fix CSprite2d::InitPerFrame(); CFont::InitPerFrame(); CPad::UpdatePads(); @@ -248,11 +274,11 @@ FrontendIdle(void) if(!RsCameraBeginUpdate(Scene.camera)) return; - DefinedState(); + DefinedState(); // seems redundant, but breaks resolution change. RenderMenus(); DoFade(); Render2dStuffAfterFade(); - CFont::DrawFonts(); +// CFont::DrawFonts(); // redundant DoRWStuffEndOfFrame(); } @@ -744,16 +770,16 @@ LoadingScreen(const char *str1, const char *str2, const char *splashscreen) #ifdef CHATTYSPLASH // my attempt static wchar tmpstr[80]; - float scale = SCREEN_SCALE_Y(0.8f); - vpos -= 50*scale; - CFont::SetScale(scale, scale); + float yscale = SCREEN_SCALE_Y(0.9f); + vpos -= 45*yscale; + CFont::SetScale(SCREEN_SCALE_X(0.75f), yscale); CFont::SetPropOn(); CFont::SetRightJustifyOff(); CFont::SetFontStyle(FONT_BANK); CFont::SetColor(CRGBA(255, 255, 255, 255)); AsciiToUnicode(str1, tmpstr); CFont::PrintString(hpos, vpos, tmpstr); - vpos += 25*scale; + vpos += 22*yscale; AsciiToUnicode(str2, tmpstr); CFont::PrintString(hpos, vpos, tmpstr); #endif @@ -999,7 +1025,11 @@ AppEventHandler(RsEvent event, void *param) case rsFRONTENDIDLE: { +#ifdef PS2_SAVE_DIALOG + Idle((void*)1); +#else FrontendIdle(); +#endif return rsEVENTPROCESSED; } -- cgit v1.2.3