about summary refs log tree commit diff
path: root/src/game/client/gameclient.cpp
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-03-22 22:41:27 +0100
committeroy <Tom_Adams@web.de>2011-03-22 22:41:27 +0100
commitb64db75a6b5e6a08c356278ab73d29707579844c (patch)
treecc58c2a2def9972c8e04892b9527e08a4ef97f29 /src/game/client/gameclient.cpp
parent05244d4dad5a08eb53fdd738588a29e26af72736 (diff)
downloadzcatch-b64db75a6b5e6a08c356278ab73d29707579844c.tar.gz
zcatch-b64db75a6b5e6a08c356278ab73d29707579844c.zip
added an option to ignore other players in chat
Diffstat (limited to 'src/game/client/gameclient.cpp')
-rw-r--r--src/game/client/gameclient.cpp43
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;