ddnet/src/game/server/player.h

162 lines
3.2 KiB
C
Raw Normal View History

2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
2010-05-29 07:25:38 +00:00
#ifndef GAME_SERVER_PLAYER_H
#define GAME_SERVER_PLAYER_H
// this include should perhaps be removed
#include "entities/character.h"
#include "gamecontext.h"
// player object
class CPlayer
{
MACRO_ALLOC_POOL_ID()
2010-05-29 07:25:38 +00:00
public:
CPlayer(CGameContext *pGameServer, int ClientID, int Team);
2010-05-29 07:25:38 +00:00
~CPlayer();
2011-01-29 00:59:50 +00:00
void Init(int CID);
2010-05-29 07:25:38 +00:00
void TryRespawn();
void Respawn();
void SetTeam(int Team);
int GetTeam() const { return m_Team; };
int GetCID() const { return m_ClientID; };
2010-05-29 07:25:38 +00:00
void Tick();
void PostTick();
2010-05-29 07:25:38 +00:00
void Snap(int SnappingClient);
void OnDirectInput(CNetObj_PlayerInput *NewInput);
void OnPredictedInput(CNetObj_PlayerInput *NewInput);
void OnDisconnect(const char *pReason);
2010-05-29 07:25:38 +00:00
void KillCharacter(int Weapon = WEAPON_GAME);
CCharacter *GetCharacter();
2010-05-29 07:25:38 +00:00
//---------------------------------------------------------
// this is used for snapping so we know how we can clip the view for the player
vec2 m_ViewPos;
// states if the client is chatting, accessing a menu etc.
int m_PlayerFlags;
// used for snapping to just update latency if the scoreboard is active
int m_aActLatency[MAX_CLIENTS];
// used for spectator mode
int m_SpectatorID;
bool m_IsReady;
2010-05-29 07:25:38 +00:00
//
int m_Vote;
int m_VotePos;
//
int m_LastVoteCall;
int m_LastVoteTry;
int m_LastChat;
int m_LastSetTeam;
int m_LastSetSpectatorMode;
int m_LastChangeInfo;
int m_LastEmote;
int m_LastKill;
2010-05-29 07:25:38 +00:00
// TODO: clean this up
struct
2010-05-29 07:25:38 +00:00
{
char m_SkinName[64];
int m_UseCustomColor;
int m_ColorBody;
int m_ColorFeet;
} m_TeeInfos;
2010-05-29 07:25:38 +00:00
int m_RespawnTick;
int m_DieTick;
int m_Score;
int m_ScoreStartTick;
2010-05-29 07:25:38 +00:00
bool m_ForceBalanced;
int m_LastActionTick;
int m_TeamChangeTick;
struct
{
int m_TargetX;
int m_TargetY;
} m_LatestActivity;
// network latency calculations
struct
{
int m_Accum;
int m_AccumMin;
int m_AccumMax;
int m_Avg;
int m_Min;
int m_Max;
} m_Latency;
2010-05-29 07:25:38 +00:00
private:
2011-04-19 08:42:48 +00:00
CCharacter *m_pCharacter;
2010-05-29 07:25:38 +00:00
CGameContext *m_pGameServer;
2010-05-29 07:25:38 +00:00
CGameContext *GameServer() const { return m_pGameServer; }
IServer *Server() const;
2010-05-29 07:25:38 +00:00
//
bool m_Spawning;
int m_ClientID;
int m_Team;
2011-01-29 00:59:50 +00:00
// DDRace
2011-01-29 00:59:50 +00:00
public:
2011-01-29 00:59:50 +00:00
struct PauseInfo
{
CCharacterCore m_Core;
int m_StartTime;
int m_DDRaceState;
int m_FreezeTime;
int m_Armor;
int m_LastMove;
vec2 m_PrevPos;
int m_ActiveWeapon;
int m_LastWeapon;
bool m_Respawn;
bool m_aHasWeapon[NUM_WEAPONS];
bool m_Super;
bool m_DeepFreeze;
bool m_EndlessHook;
int m_PauseTime;
int m_Team;
int m_TeleCheckpoint;
int m_CpActive;
float m_CpCurrent[25];
2011-07-25 19:15:51 +00:00
int m_Hit;
2011-01-29 00:59:50 +00:00
} m_PauseInfo;
int m_ForcePauseTime;
2011-01-29 00:59:50 +00:00
bool m_InfoSaved;
bool IsPlaying();
2011-01-29 00:59:50 +00:00
void LoadCharacter();
void SaveCharacter();
int64 m_Last_KickVote;
int64 m_Last_Team;
int m_Authed;
bool m_IsUsingDDRaceClient;
bool m_ShowOthers;
2011-02-08 12:44:59 +00:00
int m_ChatScore;
bool AfkTimer(int new_target_x, int new_target_y); //returns true if kicked
int64 m_LastPlaytime;
int m_LastTarget_x;
int m_LastTarget_y;
int m_Sent1stAfkWarning; // afk timer's 1st warning after 50% of sv_max_afk_time
int m_Sent2ndAfkWarning; // afk timer's 2nd warning after 90% of sv_max_afk_time
char m_pAfkMsg[160];
2010-05-29 07:25:38 +00:00
};
#endif