@@ -56,39 +56,30 @@ bool CModManager::TriggerCommand(const char* commandName, size_t commandNameLeng
5656
5757void CModManager::DoPulsePreFrame ()
5858{
59- TIMING_GRAPH (" +DoPulsePreFrame" );
60- CCore::GetSingleton ().GetFPSLimiter ()->OnFrameStart (); // Prepare FPS limiting for this frame
61-
6259 if (m_client)
6360 {
6461 m_client->PreFrameExecutionHandler ();
6562 }
66- TIMING_GRAPH (" -DoPulsePreFrame" );
6763}
6864
6965void CModManager::DoPulsePreHUDRender (bool bDidUnminimize, bool bDidRecreateRenderTargets)
7066{
71- TIMING_GRAPH (" +DoPulsePreHUDRender" );
7267 if (m_client)
7368 {
7469 m_client->PreHUDRenderExecutionHandler (bDidUnminimize, bDidRecreateRenderTargets);
7570 }
76- TIMING_GRAPH (" -DoPulsePreHUDRender" );
7771}
7872
7973void CModManager::DoPulsePostFrame ()
8074{
81- auto handleStateChange = [&]( )
75+ if (m_state == State::PendingStart )
8276 {
83- if (m_state == State::PendingStart)
84- Start ();
85- else if (m_state == State::PendingStop)
86- Stop ();
87- };
88-
89- TIMING_GRAPH (" +DoPulsePostFrame" );
90-
91- handleStateChange (); // Handle state changes before pulse
77+ Start ();
78+ }
79+ else if (m_state == State::PendingStop)
80+ {
81+ Stop ();
82+ }
9283
9384 if (m_client)
9485 {
@@ -99,15 +90,20 @@ void CModManager::DoPulsePostFrame()
9990 CCore::GetSingleton ().GetNetwork ()->DoPulse ();
10091 }
10192
102- CCore::GetSingleton ().DoReliablePulse (); // Do reliable pulse
103-
104- handleStateChange (); // Handle state changes after pulse
105-
106- // TODO: ENSURE "CModManager::DoPulsePostFrame" IS THE LAST THING BEFORE THE FRAME ENDS
107- CCore::GetSingleton ().GetFPSLimiter ()->OnFrameEnd (); // Apply FPS limiting
93+ // Make sure frame rate limit gets applied
94+ if (m_client != nullptr )
95+ CCore::GetSingleton ().EnsureFrameRateLimitApplied (); // Catch missed frames
96+ else
97+ CCore::GetSingleton ().ApplyFrameRateLimit (); // Limit when not connected
10898
109- TIMING_GRAPH (" -DoPulsePostFrame" );
110- TIMING_GRAPH (" " );
99+ if (m_state == State::PendingStart)
100+ {
101+ Start ();
102+ }
103+ else if (m_state == State::PendingStop)
104+ {
105+ Stop ();
106+ }
111107}
112108
113109bool CModManager::Load (const char * arguments)
@@ -187,7 +183,7 @@ bool CModManager::TryStart()
187183 return false ;
188184 }
189185
190- using InitClientFn = CClientBase* (__cdecl*)();
186+ using InitClientFn = CClientBase*(__cdecl*)();
191187 InitClientFn initClient = nullptr ;
192188 if (!SharedUtil::TryGetProcAddress (library, " InitClient" , initClient))
193189 {
@@ -288,4 +284,3 @@ void CModManager::TryStop()
288284 CLocalGUI::GetSingleton ().GetMainMenu ()->SetIsIngame (false );
289285 CLocalGUI::GetSingleton ().GetMainMenu ()->SetVisible (true , false );
290286}
291-
0 commit comments