about summary refs log tree commit diff
path: root/src/game/server/player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/server/player.cpp')
-rw-r--r--src/game/server/player.cpp220
1 files changed, 111 insertions, 109 deletions
diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp
index a0a2b051..0eb61cac 100644
--- a/src/game/server/player.cpp
+++ b/src/game/server/player.cpp
@@ -1,183 +1,185 @@
 #include <new>
+#include "player.h"
 
-#include <engine/e_server_interface.h>
 
-#include "player.hpp"
-#include "gamecontext.hpp"
+MACRO_ALLOC_POOL_ID_IMPL(CPlayer, MAX_CLIENTS)
 
-MACRO_ALLOC_POOL_ID_IMPL(PLAYER, MAX_CLIENTS)
-
-PLAYER::PLAYER(int client_id)
+IServer *CPlayer::Server() const { return m_pGameServer->Server(); }
+	
+CPlayer::CPlayer(CGameContext *pGameServer, int CID, int Team)
 {
-	respawn_tick = server_tick();
-	character = 0;
-	this->client_id = client_id;
+	m_pGameServer = pGameServer;
+	m_RespawnTick = Server()->Tick();
+	m_DieTick = Server()->Tick();
+	Character = 0;
+	this->m_ClientID = CID;
+	m_Team = GameServer()->m_pController->ClampTeam(Team);
 }
 
-PLAYER::~PLAYER()
+CPlayer::~CPlayer()
 {
-	delete character;
-	character = 0;
+	delete Character;
+	Character = 0;
 }
 
-void PLAYER::tick()
+void CPlayer::Tick()
 {
-	server_setclientscore(client_id, score);
+	Server()->SetClientScore(m_ClientID, m_Score);
 
 	// do latency stuff
 	{
-		CLIENT_INFO info;
-		if(server_getclientinfo(client_id, &info))
+		IServer::CClientInfo Info;
+		if(Server()->GetClientInfo(m_ClientID, &Info))
 		{
-			latency.accum += info.latency;
-			latency.accum_max = max(latency.accum_max, info.latency);
-			latency.accum_min = min(latency.accum_min, info.latency);
+			m_Latency.m_Accum += Info.m_Latency;
+			m_Latency.m_AccumMax = max(m_Latency.m_AccumMax, Info.m_Latency);
+			m_Latency.m_AccumMin = min(m_Latency.m_AccumMin, Info.m_Latency);
 		}
-
-		if(server_tick()%server_tickspeed() == 0)
+		// each second
+		if(Server()->Tick()%Server()->TickSpeed() == 0)
 		{
-			latency.avg = latency.accum/server_tickspeed();
-			latency.max = latency.accum_max;
-			latency.min = latency.accum_min;
-			latency.accum = 0;
-			latency.accum_min = 1000;
-			latency.accum_max = 0;
+			m_Latency.m_Avg = m_Latency.m_Accum/Server()->TickSpeed();
+			m_Latency.m_Max = m_Latency.m_AccumMax;
+			m_Latency.m_Min = m_Latency.m_AccumMin;
+			m_Latency.m_Accum = 0;
+			m_Latency.m_AccumMin = 1000;
+			m_Latency.m_AccumMax = 0;
 		}
 	}
 	
-	if(!character && die_tick+server_tickspeed()*3 <= server_tick())
-		spawning = true;
+	if(!Character && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick())
+		m_Spawning = true;
 
-	if(character)
+	if(Character)
 	{
-		if(character->alive)
+		if(Character->IsAlive())
 		{
-			view_pos = character->pos;
+			m_ViewPos = Character->m_Pos;
 		}
 		else
 		{
-			delete character;
-			character = 0;
+			delete Character;
+			Character = 0;
 		}
 	}
-	else if(spawning && respawn_tick <= server_tick())
-		try_respawn();
+	else if(m_Spawning && m_RespawnTick <= Server()->Tick())
+		TryRespawn();
 }
 
-void PLAYER::snap(int snapping_client)
+void CPlayer::Snap(int SnappingClient)
 {
-	NETOBJ_CLIENT_INFO *client_info = (NETOBJ_CLIENT_INFO *)snap_new_item(NETOBJTYPE_CLIENT_INFO, client_id, sizeof(NETOBJ_CLIENT_INFO));
-	str_to_ints(&client_info->name0, 6, server_clientname(client_id));
-	str_to_ints(&client_info->skin0, 6, skin_name);
-	client_info->use_custom_color = use_custom_color;
-	client_info->color_body = color_body;
-	client_info->color_feet = color_feet;
-
-	NETOBJ_PLAYER_INFO *info = (NETOBJ_PLAYER_INFO *)snap_new_item(NETOBJTYPE_PLAYER_INFO, client_id, sizeof(NETOBJ_PLAYER_INFO));
-
-	info->latency = latency.min;
-	info->latency_flux = latency.max-latency.min;
-	info->local = 0;
-	info->cid = client_id;
-	info->score = score;
-	info->team = team;
-
-	if(client_id == snapping_client)
-		info->local = 1;	
+	CNetObj_ClientInfo *ClientInfo = static_cast<CNetObj_ClientInfo *>(Server()->SnapNewItem(NETOBJTYPE_CLIENTINFO, m_ClientID, sizeof(CNetObj_ClientInfo)));
+	StrToInts(&ClientInfo->m_Name0, 6, Server()->ClientName(m_ClientID));
+	StrToInts(&ClientInfo->m_Skin0, 6, m_TeeInfos.m_SkinName);
+	ClientInfo->m_UseCustomColor = m_TeeInfos.m_UseCustomColor;
+	ClientInfo->m_ColorBody = m_TeeInfos.m_ColorBody;
+	ClientInfo->m_ColorFeet = m_TeeInfos.m_ColorFeet;
+
+	CNetObj_PlayerInfo *Info = static_cast<CNetObj_PlayerInfo *>(Server()->SnapNewItem(NETOBJTYPE_PLAYERINFO, m_ClientID, sizeof(CNetObj_PlayerInfo)));
+
+	Info->m_Latency = m_Latency.m_Min;
+	Info->m_LatencyFlux = m_Latency.m_Max-m_Latency.m_Min;
+	Info->m_Local = 0;
+	Info->m_ClientId = m_ClientID;
+	Info->m_Score = m_Score;
+	Info->m_Team = m_Team;
+
+	if(m_ClientID == SnappingClient)
+		Info->m_Local = 1;	
 }
 
-void PLAYER::on_disconnect()
+void CPlayer::OnDisconnect()
 {
-	kill_character(WEAPON_GAME);
-	
-	//game.controller->on_player_death(&game.players[client_id], 0, -1);
-		
-	char buf[512];
-	str_format(buf, sizeof(buf),  "%s has left the game", server_clientname(client_id));
-	game.send_chat(-1, GAMECONTEXT::CHAT_ALL, buf);
+	KillCharacter();
+
+	if(Server()->ClientIngame(m_ClientID))
+	{
+		char Buf[512];
+		str_format(Buf, sizeof(Buf),  "%s has left the game", Server()->ClientName(m_ClientID));
+		GameServer()->SendChat(-1, CGameContext::CHAT_ALL, Buf);
 
-	dbg_msg("game", "leave player='%d:%s'", client_id, server_clientname(client_id));
+		dbg_msg("game", "leave player='%d:%s'", m_ClientID, Server()->ClientName(m_ClientID));
+	}
 }
 
-void PLAYER::on_predicted_input(NETOBJ_PLAYER_INPUT *new_input)
+void CPlayer::OnPredictedInput(CNetObj_PlayerInput *NewInput)
 {
-	CHARACTER *chr = get_character();
-	if(chr)
-		chr->on_predicted_input(new_input);
+	if(Character)
+		Character->OnPredictedInput(NewInput);
 }
 
-void PLAYER::on_direct_input(NETOBJ_PLAYER_INPUT *new_input)
+void CPlayer::OnDirectInput(CNetObj_PlayerInput *NewInput)
 {
-	CHARACTER *chr = get_character();
-	if(chr)
-		chr->on_direct_input(new_input);
+	if(Character)
+		Character->OnDirectInput(NewInput);
 
-	if(!chr && team >= 0 && (new_input->fire&1))
-		spawning = true;
+	if(!Character && m_Team >= 0 && (NewInput->m_Fire&1))
+		m_Spawning = true;
 	
-	if(!chr && team == -1)
-		view_pos = vec2(new_input->target_x, new_input->target_y);
+	if(!Character && m_Team == -1)
+		m_ViewPos = vec2(NewInput->m_TargetX, NewInput->m_TargetY);
 }
 
-CHARACTER *PLAYER::get_character()
+CCharacter *CPlayer::GetCharacter()
 {
-	if(character && character->alive)
-		return character;
+	if(Character && Character->IsAlive())
+		return Character;
 	return 0;
 }
 
-void PLAYER::kill_character(int weapon)
+void CPlayer::KillCharacter(int Weapon)
 {
-	//CHARACTER *chr = get_character();
-	if(character)
+	if(Character)
 	{
-		character->die(client_id, weapon);
-		delete character;
-		character = 0;
+		Character->Die(m_ClientID, Weapon);
+		delete Character;
+		Character = 0;
 	}
 }
 
-void PLAYER::respawn()
+void CPlayer::Respawn()
 {
-	if(team > -1)
-		spawning = true;
+	if(m_Team > -1)
+		m_Spawning = true;
 }
 
-void PLAYER::set_team(int new_team)
+void CPlayer::SetTeam(int Team)
 {
 	// clamp the team
-	new_team = game.controller->clampteam(new_team);
-	if(team == new_team)
+	Team = GameServer()->m_pController->ClampTeam(Team);
+	if(m_Team == Team)
 		return;
 		
-	char buf[512];
-	str_format(buf, sizeof(buf), "%s joined the %s", server_clientname(client_id), game.controller->get_team_name(new_team));
-	game.send_chat(-1, GAMECONTEXT::CHAT_ALL, buf); 
+	char Buf[512];
+	str_format(Buf, sizeof(Buf), "%s joined the %s", Server()->ClientName(m_ClientID), GameServer()->m_pController->GetTeamName(Team));
+	GameServer()->SendChat(-1, CGameContext::CHAT_ALL, Buf); 
 	
-	kill_character(WEAPON_GAME);
-	team = new_team;
-	score = 0;
-	dbg_msg("game", "team_join player='%d:%s' team=%d", client_id, server_clientname(client_id), team);
+	KillCharacter();
+	m_Team = Team;
+	m_Score = 0;
+	// we got to wait 0.5 secs before respawning
+	m_RespawnTick = Server()->Tick()+Server()->TickSpeed()/2;
+	dbg_msg("game", "team_join player='%d:%s' m_Team=%d", m_ClientID, Server()->ClientName(m_ClientID), m_Team);
 	
-	game.controller->on_player_info_change(game.players[client_id]);
+	GameServer()->m_pController->OnPlayerInfoChange(GameServer()->m_apPlayers[m_ClientID]);
 }
 
-void PLAYER::try_respawn()
+void CPlayer::TryRespawn()
 {
-	vec2 spawnpos = vec2(100.0f, -60.0f);
+	vec2 SpawnPos = vec2(100.0f, -60.0f);
 	
-	if(!game.controller->can_spawn(this, &spawnpos))
+	if(!GameServer()->m_pController->CanSpawn(this, &SpawnPos))
 		return;
 
 	// check if the position is occupado
-	ENTITY *ents[2] = {0};
-	int num_ents = game.world.find_entities(spawnpos, 64, ents, 2, NETOBJTYPE_CHARACTER);
+	CEntity *apEnts[2] = {0};
+	int NumEnts = GameServer()->m_World.FindEntities(SpawnPos, 64, apEnts, 2, NETOBJTYPE_CHARACTER);
 	
-	if(num_ents == 0)
+	if(NumEnts == 0)
 	{
-		spawning = false;
-		character = new(client_id) CHARACTER();
-		character->spawn(this, spawnpos, team);
-		game.create_playerspawn(spawnpos);
+		m_Spawning = false;
+		Character = new(m_ClientID) CCharacter(&GameServer()->m_World);
+		Character->Spawn(this, SpawnPos);
+		GameServer()->CreatePlayerSpawn(SpawnPos);
 	}
 }