| 3692 | } |
| 3693 | |
| 3694 | void 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 | |
| 3749 | void CGameClient::HandlePredictedEvents(const int Tick) |
| 3750 | { |
nothing calls this directly
no test coverage detected