MCPcopy Create free account
hub / github.com/ddnet/ddnet / CheckStartLocal

Method CheckStartLocal

src/game/client/components/ghost.cpp:212–259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

210}
211
212void CGhost::CheckStartLocal(bool Predicted)
213{
214 if(Predicted) // rendering
215 {
216 int RenderTick = m_NewRenderTick;
217
218 vec2 PrevPos = GameClient()->m_PredictedPrevChar.m_Pos;
219 vec2 Pos = GameClient()->m_PredictedChar.m_Pos;
220 if(((!m_Rendering && RenderTick == -1) || m_AllowRestart) && GameClient()->RaceHelper()->IsStart(PrevPos, Pos))
221 {
222 if(m_Rendering && !m_RenderingStartedByServer) // race restarted: stop rendering
223 StopRender();
224 RenderTick = Client()->PredGameTick(g_Config.m_ClDummy);
225 }
226
227 TryRenderStart(RenderTick, false);
228 }
229 else // recording
230 {
231 int PrevTick = GameClient()->m_Snap.m_pLocalPrevCharacter->m_Tick;
232 int CurTick = GameClient()->m_Snap.m_pLocalCharacter->m_Tick;
233 vec2 PrevPos = vec2(GameClient()->m_Snap.m_pLocalPrevCharacter->m_X, GameClient()->m_Snap.m_pLocalPrevCharacter->m_Y);
234 vec2 Pos = vec2(GameClient()->m_Snap.m_pLocalCharacter->m_X, GameClient()->m_Snap.m_pLocalCharacter->m_Y);
235
236 // detecting death, needed because race allows immediate respawning
237 if((!m_Recording || m_AllowRestart) && m_LastDeathTick < PrevTick)
238 {
239 // estimate the exact start tick
240 int RecordTick = -1;
241 int TickDiff = CurTick - PrevTick;
242 for(int i = 0; i < TickDiff; i++)
243 {
244 if(GameClient()->RaceHelper()->IsStart(mix(PrevPos, Pos, (float)i / TickDiff), mix(PrevPos, Pos, (float)(i + 1) / TickDiff)))
245 {
246 RecordTick = PrevTick + i + 1;
247 if(!m_AllowRestart)
248 break;
249 }
250 }
251 if(RecordTick != -1)
252 {
253 if(GhostRecorder()->IsRecording()) // race restarted: stop recording
254 GhostRecorder()->Stop(0, -1);
255 StartRecord(RecordTick);
256 }
257 }
258 }
259}
260
261void CGhost::TryRenderStart(int Tick, bool ServerControl)
262{

Callers

nothing calls this directly

Calls 7

mixFunction · 0.85
IsStartMethod · 0.80
RaceHelperMethod · 0.80
PredGameTickMethod · 0.80
ClientFunction · 0.50
IsRecordingMethod · 0.45
StopMethod · 0.45

Tested by

no test coverage detected