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

Method UpdateRenderedCharacters

src/game/client/gameclient.cpp:3694–3747  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3692}
3693
3694void CGameClient::UpdateRenderedCharacters()
3695{
3696 for(int i = 0; i < MAX_CLIENTS; i++)
3697 {
3698 if(!m_Snap.m_aCharacters[i].m_Active)
3699 continue;
3700 m_aClients[i].m_RenderCur = m_Snap.m_aCharacters[i].m_Cur;
3701 m_aClients[i].m_RenderPrev = m_Snap.m_aCharacters[i].m_Prev;
3702 m_aClients[i].m_IsPredicted = false;
3703 m_aClients[i].m_IsPredictedLocal = false;
3704 vec2 UnpredPos = mix(
3705 vec2(m_Snap.m_aCharacters[i].m_Prev.m_X, m_Snap.m_aCharacters[i].m_Prev.m_Y),
3706 vec2(m_Snap.m_aCharacters[i].m_Cur.m_X, m_Snap.m_aCharacters[i].m_Cur.m_Y),
3707 Client()->IntraGameTick(g_Config.m_ClDummy));
3708 vec2 Pos = UnpredPos;
3709
3710 CCharacter *pChar = m_PredictedWorld.GetCharacterById(i);
3711 if(Predict() && (i == m_Snap.m_LocalClientId || (AntiPingPlayers() && !IsOtherTeam(i))) && pChar)
3712 {
3713 m_aClients[i].m_Predicted.Write(&m_aClients[i].m_RenderCur);
3714 m_aClients[i].m_PrevPredicted.Write(&m_aClients[i].m_RenderPrev);
3715
3716 m_aClients[i].m_IsPredicted = true;
3717
3718 Pos = mix(
3719 vec2(m_aClients[i].m_RenderPrev.m_X, m_aClients[i].m_RenderPrev.m_Y),
3720 vec2(m_aClients[i].m_RenderCur.m_X, m_aClients[i].m_RenderCur.m_Y),
3721 m_aClients[i].m_IsPredicted ? Client()->PredIntraGameTick(g_Config.m_ClDummy) : Client()->IntraGameTick(g_Config.m_ClDummy));
3722
3723 if(i == m_Snap.m_LocalClientId || (PredictDummy() && i == m_aLocalIds[!g_Config.m_ClDummy]))
3724 {
3725 m_aClients[i].m_IsPredictedLocal = true;
3726 if(AntiPingGunfire() && ((pChar->m_NinjaJetpack && pChar->m_FreezeTime == 0) || m_Snap.m_aCharacters[i].m_Cur.m_Weapon != WEAPON_NINJA || m_Snap.m_aCharacters[i].m_Cur.m_Weapon == m_aClients[i].m_Predicted.m_ActiveWeapon))
3727 {
3728 m_aClients[i].m_RenderCur.m_AttackTick = pChar->GetAttackTick();
3729 if(m_Snap.m_aCharacters[i].m_Cur.m_Weapon != WEAPON_NINJA && !(pChar->m_NinjaJetpack && pChar->Core()->m_ActiveWeapon == WEAPON_GUN))
3730 m_aClients[i].m_RenderCur.m_Weapon = m_aClients[i].m_Predicted.m_ActiveWeapon;
3731 }
3732 }
3733 else
3734 {
3735 // use unpredicted values for other players
3736 m_aClients[i].m_RenderPrev.m_Angle = m_Snap.m_aCharacters[i].m_Prev.m_Angle;
3737 m_aClients[i].m_RenderCur.m_Angle = m_Snap.m_aCharacters[i].m_Cur.m_Angle;
3738
3739 if(g_Config.m_ClAntiPingSmooth)
3740 Pos = GetSmoothPos(i);
3741 }
3742 }
3743 m_aClients[i].m_RenderPos = Pos;
3744 if(Predict() && i == m_Snap.m_LocalClientId)
3745 m_LocalCharacterPos = Pos;
3746 }
3747}
3748
3749void CGameClient::HandlePredictedEvents(const int Tick)
3750{

Callers

nothing calls this directly

Calls 8

mixFunction · 0.85
IntraGameTickMethod · 0.80
GetCharacterByIdMethod · 0.80
PredIntraGameTickMethod · 0.80
GetAttackTickMethod · 0.80
ClientFunction · 0.50
WriteMethod · 0.45
CoreMethod · 0.45

Tested by

no test coverage detected