diff options
Diffstat (limited to 'src/game/client/gameclient.cpp')
| -rw-r--r-- | src/game/client/gameclient.cpp | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index a7e9e66f..9f0898fc 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -341,20 +341,7 @@ void CGameClient::OnReset() mem_zero(&g_GameClient.m_Snap, sizeof(g_GameClient.m_Snap)); for(int i = 0; i < MAX_CLIENTS; i++) - { - m_aClients[i].m_aName[0] = 0; - m_aClients[i].m_aClan[0] = 0; - m_aClients[i].m_Country = -1; - m_aClients[i].m_SkinID = 0; - m_aClients[i].m_Team = 0; - m_aClients[i].m_Angle = 0; - m_aClients[i].m_Emoticon = 0; - m_aClients[i].m_EmoticonStart = -1; - m_aClients[i].m_SkinInfo.m_Texture = g_GameClient.m_pSkins->Get(0)->m_ColorTexture; - m_aClients[i].m_SkinInfo.m_ColorBody = vec4(1,1,1,1); - m_aClients[i].m_SkinInfo.m_ColorFeet = vec4(1,1,1,1); - m_aClients[i].UpdateRenderInfo(); - } + m_aClients[i].Reset(); for(int i = 0; i < m_All.m_Num; i++) m_All.m_paComponents[i]->OnReset(); @@ -744,7 +731,6 @@ void CGameClient::OnNewSnapshot() } m_aClients[ClientID].UpdateRenderInfo(); - g_GameClient.m_Snap.m_NumPlayers++; } else if(Item.m_Type == NETOBJTYPE_PLAYERINFO) @@ -752,7 +738,9 @@ void CGameClient::OnNewSnapshot() const CNetObj_PlayerInfo *pInfo = (const CNetObj_PlayerInfo *)pData; m_aClients[pInfo->m_ClientID].m_Team = pInfo->m_Team; + m_aClients[pInfo->m_ClientID].m_Active = true; m_Snap.m_paPlayerInfos[pInfo->m_ClientID] = pInfo; + m_Snap.m_NumPlayers++; if(pInfo->m_Local) { @@ -839,6 +827,13 @@ void CGameClient::OnNewSnapshot() m_Snap.m_SpecInfo.m_SpectatorID = SPEC_FREEVIEW; } + // clear out unneeded client data + for(int i = 0; i < MAX_CLIENTS; ++i) + { + if(!m_Snap.m_paPlayerInfos[i] && m_aClients[i].m_Active) + m_aClients[i].Reset(); + } + // sort player infos by score mem_copy(m_Snap.m_paInfoByScore, m_Snap.m_paPlayerInfos, sizeof(m_Snap.m_paInfoByScore)); for(int k = 0; k < MAX_CLIENTS-1; k++) // ffs, bubblesort @@ -1017,6 +1012,24 @@ void CGameClient::CClientData::UpdateRenderInfo() } } +void CGameClient::CClientData::Reset() +{ + m_aName[0] = 0; + m_aClan[0] = 0; + m_Country = -1; + m_SkinID = 0; + m_Team = 0; + m_Angle = 0; + m_Emoticon = 0; + m_EmoticonStart = -1; + m_Active = false; + m_ChatIgnore = false; + m_SkinInfo.m_Texture = g_GameClient.m_pSkins->Get(0)->m_ColorTexture; + m_SkinInfo.m_ColorBody = vec4(1,1,1,1); + m_SkinInfo.m_ColorFeet = vec4(1,1,1,1); + UpdateRenderInfo(); +} + void CGameClient::SendSwitchTeam(int Team) { CNetMsg_Cl_SetTeam Msg; |