etqw-sdk/source/game/Player.h

1395 lines
50 KiB
C++

// Copyright (C) 2007 Id Software, Inc.
//
#ifndef __GAME_PLAYER_H__
#define __GAME_PLAYER_H__
typedef enum playerStance_t {
PS_DEAD,
PS_PRONE,
PS_CROUCH,
PS_NORMAL,
};
#include "PredictionErrorDecay.h"
#include "Actor.h"
#include "PlayerView.h"
#include "PlayerIcon.h"
#include "GameEdit.h"
#include "physics/Physics_Player.h"
#include "roles/Inventory.h"
#include "roles/Tasks.h"
#include "proficiency/ProficiencyManager.h"
#include "CrosshairInfo.h"
#include "structures/DeployZone.h"
#include "Teleporter.h"
#include "effects/HardcodedParticleSystem.h"
#include "effects/WaterEffects.h"
#include "proficiency/StatsTracker.h"
class sdVehiclePosition;
class idWeapon;
class sdDeclToolTip;
class sdWorldToScreenConverter;
class sdPlayerStateData;
class sdDeployMask;
class sdPlayZone;
class sdPlayerDisplayIconList;
struct deployMaskExtents_t;
typedef sdPair< const sdDeclToolTip*, sdToolTipParms* > toolTipParms_t;
const int STEPUP_TIME = 200;
#define PLAYER_DAMAGE_LOG
/*
===============================================================================
Player entity.
===============================================================================
*/
enum viewState_t {
VS_NONE,
VS_REMOTE,
VS_FULL,
};
extern const idEventDef EV_Player_GetButton;
extern const idEventDef EV_Player_GetMove;
extern const idEventDef EV_Player_GetAmmoFraction;
extern const idEventDef EV_Player_GetVehicle;
extern const idEventDef EV_Player_GetClassKey;
extern const idEventDef EV_Player_GetEnemy;
enum playerCombatState_t {
COMBATSTATE_DAMAGERECEIVED = BITT< 0 >::VALUE,
COMBATSTATE_DAMAGEDEALT = BITT< 1 >::VALUE,
COMBATSTATE_KILLEDPLAYER = BITT< 2 >::VALUE,
};
class sdPlayerStateData : public sdEntityStateNetworkData {
public:
sdPlayerStateData( void ) { ; }
virtual void MakeDefault( void );
virtual void Write( idFile* file ) const;
virtual void Read( idFile* file );
idList< int > timers;
int stepUpTime;
float stepUpDelta;
};
class sdPlayerStateBroadcast : public sdEntityStateNetworkData {
public:
sdPlayerStateBroadcast( void ) { ; }
virtual void MakeDefault( void );
virtual void Write( idFile* file ) const;
virtual void Read( idFile* file );
sdInventoryPlayerStateData inventoryData;
int lastDamageDecl;
int lastDamageDir;
short lastDamageLocation;
int lastHitCounter;
int lastHitEntity;
bool lastHitHeadshot;
};
class sdPlayerNetworkData : public sdEntityStateNetworkData {
public:
sdPlayerNetworkData( void ) { ; }
virtual void MakeDefault( void );
virtual void Write( idFile* file ) const;
virtual void Read( idFile* file );
int proxyEntitySpawnId;
sdPlayerPhysicsNetworkData physicsData;
sdScriptObjectNetworkData scriptData;
bool hasPhysicsData;
short deltaViewAngles[ 2 ];
short viewAngles[ 2 ];
sdPlayerStateData playerStateData;
};
class sdPlayerBroadcastData : public sdEntityStateNetworkData {
public:
sdPlayerBroadcastData( void ) { ; }
virtual void MakeDefault( void );
virtual void Write( idFile* file ) const;
virtual void Read( idFile* file );
sdPlayerPhysicsBroadcastData physicsData;
sdInventoryBroadcastData inventoryData;
sdScriptObjectNetworkData scriptData;
short health;
short maxHealth;
int targetLockSpawnId;
int targetLockEndTime;
float baseDeathYaw;
bool isLagged;
bool forceRespawn;
bool wantSpawn;
sdPlayerStateBroadcast playerStateData;
};
typedef enum locationDamageArea_e {
LDA_INVALID = -1,
LDA_LEGS,
LDA_TORSO,
LDA_HEAD,
LDA_NECK,
LDA_HEADBOX,
LDA_COUNT,
} locationDamageArea_t;
typedef struct locationalDamageInfo_s {
jointHandle_t joint;
idVec3 pos;
locationDamageArea_t area;
} locationalDamageInfo_t;
class sdPlayerInteractiveInterface : public sdInteractiveInterface {
public:
sdPlayerInteractiveInterface( void ) { _owner = NULL; _activateFunc = NULL; }
void Init( idPlayer* owner );
virtual bool OnActivate( idPlayer* player, float distance );
virtual bool OnActivateHeld( idPlayer* player, float distance );
virtual bool OnUsed( idPlayer* player, float distance );
private:
idPlayer* _owner;
const sdProgram::sdFunction* _activateFunc;
const sdProgram::sdFunction* _activateHeldFunc;
};
class idPlayer : public idActor {
friend class idBot; //mal: need access to player stuff
public:
enum {
EVENT_RESPAWN = idActor::EVENT_MAXEVENTS,
EVENT_SETCLASS,
EVENT_SETCACHEDCLASS,
EVENT_SPECTATE,
EVENT_DISGUISE,
EVENT_SELECTTASK,
EVENT_SETPROXY,
EVENT_SETPROXYVIEW,
EVENT_BINADD,
EVENT_BINREMOVE,
EVENT_SETTELEPORT,
EVENT_SETCAMERA,
EVENT_SETREADY,
EVENT_SETINVULNERABLE,
EVENT_VOTE_DELAY,
#ifdef PLAYER_DAMAGE_LOG
EVENT_TAKEDAMAGE,
#endif // PLAYER_DAMAGE_LOG
EVENT_RESETPREDICTIONDECAY,
EVENT_GODMODE,
EVENT_NOCLIP,
EVENT_SETWEAPON,
EVENT_LIFESTAT,
EVENT_MAXEVENTS
};
enum eyePos_t {
EP_SPECTATOR,
EP_DEAD,
EP_CROUCH,
EP_PRONE,
EP_PROXY,
EP_NORMAL,
EP_INVALID,
};
const static int MAX_PLAYER_BIN_SIZE = 32;
usercmd_t usercmd;
eyePos_t oldEyePosition;
eyePos_t eyePosition;
int eyePosChangeTime;
int eyePosChangeDuration;
idVec3 eyePosChangeStart;
idAngles spawnAngles;
idAngles viewAngles; // player view angles
idAngles cmdAngles; // player cmd angles
idAngles cameraViewAngles;
idAngles clientViewAngles; // client interpolated view angles
float baseDeathYaw;
bool lastWeaponViewAnglesValid;
idAngles lastWeaponViewAngles;
idVec3 weaponAngVel;
userButtonsUnion_t oldButtons;
int oldFlags;
userButtonsUnion_t clientOldButtons;
userButtonsUnion_t clientButtons;
bool clientButtonsUsed;
int nextSndHitTime; // MP hit sound - != lastHurtTime because we throttle
int lastReviveTime;
int voiceChatLimit;
idScriptBool AI_FORWARD;
idScriptBool AI_BACKWARD;
idScriptBool AI_STRAFE_LEFT;
idScriptBool AI_STRAFE_RIGHT;
idScriptBool AI_ATTACK_HELD;
idScriptBool AI_WEAPON_FIRED;
idScriptBool AI_JUMP;
idScriptBool AI_CROUCH;
idScriptBool AI_PRONE;
idScriptBool AI_SPRINT;
idScriptBool AI_ONGROUND;
idScriptBool AI_ONLADDER;
idScriptBool AI_DEAD;
idScriptFloat AI_LEAN;
idScriptBool AI_RUN;
idScriptBool AI_HARDLANDING;
idScriptBool AI_SOFTLANDING;
idScriptBool AI_RELOAD;
idScriptBool AI_TELEPORT;
idScriptBool AI_TURN_LEFT;
idScriptBool AI_TURN_RIGHT;
idScriptBool AI_PUTAWAY_ACTIVE;
idScriptBool AI_TAKEOUT_ACTIVE;
idScriptInt AI_INWATER;
int lastGroundContactTime;
idEntityPtr< idWeapon > weapon;
int vehicleViewCurrentZoom;
int lastTimeInPlayZone;
float targetIdRangeNormal;
int nextBannerPlayTime;
int nextBannerIndex;
int nextCallVoteTime;
renderView_s renderView;
idLinkList< idEntity > targetNode;
idEntityPtr< idEntity > targetEntity;
idEntityPtr< idEntity > targetEntityPrevious;
int targetLockEndTime;
int targetLockDuration;
int targetLockLastTime;
int targetLockSafeTime;
float targetLockTimeScale;
int lastTeamSetTime;
int nextTeamSwitchTime;
int nextReadyToggleTime;
int nextSuicideTime;
int nextTeamBalanceSwitchTime;
int lastAliveTimeRegistered;
int gameStartTime;
userInfo_t userInfo;
angleClamp_t deadClampPitch;
angleClamp_t deadClampYaw;
angleClamp_t proneClampPitch;
angleClamp_t proneClampYaw;
// damage taken from other players/vehicles/whatever
struct damageEvent_t {
int hitTime;
float hitAngle;
float hitDamage;
bool updateDirection;
};
int lastHurtTime; // the last time we took damage (used for screen effects, etc.)
static const int MAX_DAMAGE_EVENTS = 16;
static const int NUM_REPAIR_INDICATORS = 4;
idStaticList< damageEvent_t, MAX_DAMAGE_EVENTS > damageEvents;
bool ownsVehicle;
bool aasPullPlayer;
int lastOwnedVehicleSpawnID;
int lastOwnedVehicleTime;
private:
idEntityPtr< idEntity > selectedSpawnPoint;
const sdDeclRating* rating;
int lastDamageDealtTime; // last time projectile fired by player hit target
teamAllegiance_t lastDamageDealtType; // the allegiance of the last item hit
bool newDamageDealt; //
int lastDamageFriendlyVO;
public:
virtual bool Pain( idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location, const sdDeclDamage* damageDecl );
bool InhibitMovement( void ) const;
bool InhibitTurning( void );
bool InhibitHud( void );
bool InhibitWeaponSwitch( bool allowPause = false ) const;
bool InhibitWeapon( void ) const;
void SetClip( int modIndex, int count );
int GetClip( int modIndex );
int GetNextTeamSwitchTime( void ) const { return nextTeamSwitchTime; }
int GetNextTeamBalanceSwitchTime( void ) const { return nextTeamBalanceSwitchTime; }
void SetNextTeamBalanceSwitchTime( int time ) { nextTeamBalanceSwitchTime = time; }
int GetNextCallVoteTime( void ) const { return nextCallVoteTime; }
void SetNextCallVoteTime( int time );
void RegisterTimeAlive( void );
void RequestQuickChat( const sdDeclQuickChat* quickChatDecl, int targetSpawnId );
// the last time we took damage
int GetLastHurtTime( void ) { return lastHurtTime; }
void AddDamageEvent( int time, float angle, float damage, bool updateDirection );
void ClearDamageEvents();
const damageEvent_t& GetLastDamageEvent() const;
// feedback for the player dealing damage to another entity
void SetLastDamageDealtTime( int time );
int GetLastDamageDealtTime() const { return lastDamageDealtTime; }
teamAllegiance_t GetLastDamageDealtType() const { return lastDamageDealtType; }
bool NewDamageDealt() const { return newDamageDealt; }
void ClearDamageDealt() { newDamageDealt = false; }
void SelectWeaponByName( const char* weaponName );
idVec3 GetEyeOffset( eyePos_t pos );
float GetEyeChangeRate( eyePos_t pos );
bool HandleGuiEvent( const sdSysEvent* event );
bool TranslateGuiBind( const idKey& key, sdKeyCommand** cmd );
void SetActionMessage( const char* message );
void UpdateToolTips( void );
void UpdateToolTipTimeline( void );
void RunToolTipTimelineEvent( const sdDeclToolTip::timelineEvent_t& event );
bool IsToolTipPlaying( void ) const { return toolTips.Num() > 0 || nextTooltipTime > gameLocal.time; }
bool IsSinglePlayerToolTipPlaying( void ) const { return currentToolTip != NULL && currentToolTip->GetSinglePlayerToolTip(); }
void UpdatePlayerInformation( void ); //mal: for the bots
void UpdatePlayerTeamInfo( void ); //mal: ditto
bool IsSniperScopeUp( void );
bool IsPanting( void );
bool InVehicle( void );
virtual float GetDamageXPScale( void ) const { return damageXPScale; }
bool IsReady( void ) const { return playerFlags.ready; }
void SetReady( bool value, bool force );
void UsercommandCallback( usercmd_t& cmd );
bool GetSensitivity( float& scaleX, float& scaleY );
bool KeyMove( char forward, char right, char up, usercmd_t& cmd );
void ControllerMove( bool doGameCallback, const int numControllers, const int* controllerNumbers,
const float** controllerAxis, idVec3& viewAngles, usercmd_t& cmd );
void MouseMove( const idAngles& baseAngles, idAngles& angleDelta );
void UpdateShadows( void );
viewState_t HasShadow( void );
virtual const char* GetDefaultSurfaceType( void ) const { return "flesh"; }
virtual void ShutdownThreads( void );
virtual bool HasAbility( qhandle_t handle ) const;
virtual bool SupportsAbilities( void ) const { return true; }
virtual bool StartSynced( void ) const { return true; }
void UpdateRating( void );
void Revive( idPlayer* other, float healthScale );
bool IsUIFocused( const guiHandle_t& ui ) { return ui == focusUI; }
bool InhibitUserCommands();
void SetHipJoint( jointHandle_t handle ) { hipJoint = handle; }
void SetChestJoint( jointHandle_t handle ) { chestJoint = handle; }
void SetTorsoJoint( jointHandle_t handle ) { torsoJoint = handle; }
void SetHeadJoint( jointHandle_t handle ) { headJoint = handle; }
void SetShoulderJoint( int index, jointHandle_t handle ) { arms[ index ].shoulderJoint = handle; }
void SetElbowJoint( int index, jointHandle_t handle ) { arms[ index ].elbowJoint = handle; }
void SetHandJoint( int index, jointHandle_t handle ) { arms[ index ].handJoint = handle; }
void SetFootJoint( int index, jointHandle_t handle ) { arms[ index ].footJoint = handle; }
void SetHeadModelJoint( jointHandle_t handle ) { headModelJoint = handle; }
void SetHeadModelOffset( const idVec3& offset ) { headModelOffset = offset; }
jointHandle_t GetHipJoint( void ) const { return hipJoint; }
jointHandle_t GetChestJoint( void ) const { return chestJoint; }
jointHandle_t GetTorsoJoint( void ) const { return torsoJoint; }
jointHandle_t GetHeadJoint( void ) const { return headJoint; }
jointHandle_t GetShoulderJoint( int index ) const { return arms[ index ].shoulderJoint; }
jointHandle_t GetElbowJoint( int index ) const { return arms[ index ].elbowJoint; }
jointHandle_t GetHandJoint( int index ) const { return arms[ index ].handJoint; }
jointHandle_t GetFootJoint( int index ) const { return arms[ index ].footJoint; }
jointHandle_t GetHeadModelJoint( void ) const { return headModelJoint; }
const idVec3& GetHeadModelOffset() const { return headModelOffset; }
void ClearIKJoints( void );
float GetSwayScale( void ) const { return swayScale; }
void SetSwayScale( float newSwayScale ) { swayScale = newSwayScale; }
void UpdatePlayZoneInfo( void );
virtual void ApplyRadiusPush( const idVec3& pushOrigin, const idVec3& entityOrigin, const sdDeclDamage* damageDecl, float pushScale, float radius );
void SendUnLocalisedMessage( const wchar_t* message );
void SendLocalisedMessage( const sdDeclLocStr* locStr, const idWStrList& parms );
bool NeedsRevive( void ) const;
bool WantRespawn( void ) const { return ( playerFlags.forceRespawn || playerFlags.wantSpawn ) && CanPlay(); }
bool CanPlay( void ) const;
void ServerForceRespawn( bool noBody );
void ClientForceRespawn( void );
void OnForceRespawn( bool noBody );
void OnFullyKilled( bool noBody );
void SetSpawnPoint( idEntity* other );
idEntity* GetSpawnPoint( void ) const { return selectedSpawnPoint; }
void CreateBody( void );
virtual void ApplyNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& newState );
virtual void ReadNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, const idBitMsg& msg ) const;
virtual void WriteNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, idBitMsg& msg ) const;
virtual bool CheckNetworkStateChanges( networkStateMode_t mode, const sdEntityStateNetworkData& baseState ) const;
virtual void ResetNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& newState );
virtual sdEntityStateNetworkData* CreateNetworkStructure( networkStateMode_t mode ) const;
virtual void OnSnapshotHitch();
virtual bool RunPausedPhysics( void ) const;
void ApplyPlayerStateData( const sdEntityStateNetworkData& newState );
void ReadPlayerStateData( const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, const idBitMsg& msg ) const;
void WritePlayerStateData( const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, idBitMsg& msg ) const;
bool CheckPlayerStateData( const sdEntityStateNetworkData& baseState ) const;
void ApplyPlayerStateBroadcast( const sdEntityStateNetworkData& newState );
void ReadPlayerStateBroadcast( const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, const idBitMsg& msg ) const;
void WritePlayerStateBroadcast( const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, idBitMsg& msg ) const;
bool CheckPlayerStateBroadcast( const sdEntityStateNetworkData& baseState ) const;
bool ShouldReadPlayerState( void ) const {
if ( gameLocal.isRepeater && gameLocal.serverIsRepeater ) {
return true;
}
return gameLocal.GetSnapshotPlayer() == this;
}
bool ShouldWritePlayerState( void ) const {
if ( gameLocal.isRepeater && gameLocal.snapShotClientIsRepeater ) {
return true;
}
return gameLocal.GetSnapshotPlayer() == this;
}
virtual void WriteInitialReliableMessages( const sdReliableMessageClientInfoBase& target ) const;
idEntity* GetProxyEntity( void ) const { return proxyEntity; }
int GetProxyPositionId( void ) const { return proxyPositionId; }
int GetProxyViewMode( void ) const { return proxyViewMode; }
void SetProxyEntity( idEntity* proxy, int positionId );
void SetProxyViewMode( int mode, bool force );
void OnProxyUpdate( int newProxySpawnId, int newProxyPositionId );
void ShowWeaponMenu( sdWeaponSelectionMenu::eActivationType show, bool noTimeout = false );
virtual bool AcceptWeaponSwitch( bool hideWeaponMenu = true );
void SwitchWeapon();
virtual bool CanCollide( const idEntity* other, int traceId ) const;
virtual void WriteDemoBaseData( idFile* file ) const;
virtual void ReadDemoBaseData( idFile* file );
virtual cheapDecalUsage_t GetDecalUsage( void );
virtual void OnBindMasterVisChanged();
public:
void PlayFootStep( const char* prefix, bool rightFoot );
virtual void PlayPain( const char* strength );
void PlayQuickChat( const idVec3& location, int sendingClientNum, const sdDeclQuickChat* quickChat, idEntity* target );
void PlayProneFailedToolTip( void );
void CancelToolTips( void );
void CancelToolTipTimeline( void );
void SendToolTip( const sdDeclToolTip* toolTip, sdToolTipParms* toolTipParms = NULL );
void SpawnToolTip( const sdDeclToolTip* toolTip, sdToolTipParms* toolTipParms = NULL );
const sdDeclToolTip* currentToolTip;
idList< toolTipParms_t >toolTips;
int nextTooltipTime;
int invulnerableEndTime;
int lastDmgTime;
int actionMessageTime;
idStr actionMessage;
const idVec3 & GetViewPos( void ) const { return firstPersonViewOrigin; }
const idMat3 & GetViewAxis( void ) const { return firstPersonViewAxis; }
const idAngles & GetViewAngles( void ) const { return viewAngles; }
const idAngles & GetCommandAngles( void ) const { return cmdAngles; }
idPlayer* GetViewClient( void );
idPlayer* GetSpectateClient( void ) const;
int GetSpectateClientId( void );
void SetSpectateClient( idPlayer* player );
void SetSpectateId( int id );
void OnSetClientSpectatee( idPlayer* spectatee );
qhandle_t GetUserGroup( void );
void SetUserGroup( qhandle_t group );
void DropDisguise( void );
int GetDisguiseClient( void ) const { return disguiseClient; }
virtual idEntity* GetDisguiseEntity( void );
const sdDeclPlayerClass* GetDisguiseClass( void ) const { return disguiseClass; }
sdTeamInfo* GetDisguiseTeam( void ) const { return disguiseTeam; }
bool IsDisguised( void ) const { return disguiseClient != -1; }
void SetDisguised( int disguiseSpawnId, const sdDeclPlayerClass* playerClass, sdTeamInfo* playerTeam, const sdDeclRank* rank, const sdDeclRating* rating, const char* name );
bool CheckDetected( float detectionRange );
void BuildViewFrustum( idFrustum& frustum, float range ) const;
virtual void CheckWater( const idVec3& waterBodyOrg, const idMat3& waterBodyAxis, idCollisionModel* waterBodyModel );
virtual void CheckWaterEffectsOnly( void ) { if ( waterEffects != NULL ) { waterEffects->CheckWaterEffectsOnly(); } }
static const int NO_DEATH_SOUND = -0xD1E; // HACK: magic value to not play death sound
void ClearDeathSound( void ) { health = NO_DEATH_SOUND; }
bool IsFPSUnlock( void );
bool IsCarryingObjective( void ) const { return playerFlags.carryingObjective; }
bool IsSendingVoice( void ) const { return ( sys->Milliseconds() - networkSystem->GetLastVoiceReceivedTime( entityNumber ) < SEC2MS( 0.5f ) ); }
private:
void PlayDeathSound( void );
int spectateClient;
// Gordon: FIXME: Make a struct/class
int disguiseClient;
idStr disguiseUserName;
const sdDeclRank* disguiseRank;
const sdDeclRating* disguiseRating;
sdTeamInfo* disguiseTeam;
const sdDeclPlayerClass* disguiseClass;
struct playerFlags_t {
bool forceRespawn : 1;
bool sprintDisabled : 1;
bool runDisabled : 1;
bool isLagged : 1; // replicated from server, true if packets haven't been received from client.
bool wantSpectate : 1;
bool wantSpawn : 1;
bool targetLocked : 1;
bool commandMapInfoVisible : 1;
bool noclip : 1;
bool godmode : 1;
bool ingame : 1;
bool weaponChanged : 1;
bool turningFrozen : 1;
bool sniperAOR : 1;
bool spawnAnglesSet : 1; // on first usercmd, we must set deltaAngles
bool weaponLock : 1;
bool clientWeaponLock : 1;
bool legsForward : 1;
bool scriptHide : 1; // Scripts want the player hidden
bool noShadow : 1;
bool inPlayZone : 1;
bool inhibitGUIs : 1;
bool ready : 1;
bool noFootsteps : 1;
bool noFallingDamage : 1;
bool manualTaskSelection : 1;
bool carryingObjective : 1;
};
playerFlags_t playerFlags;
int killedTime;
int weaponSwitchTimeout;
// index inside the UI for the weapon bank
int weaponSelectionItemIndex;
sdWaterEffects* waterEffects;
public:
int lastSpectateTeleport;
int lastHitCounter;
idEntityPtr< idEntity > lastHitEntity;
bool lastHitHeadshot;
qhandle_t lagIcon;
qhandle_t godIcon;
// for crash landings
int landChange;
int landTime;
int nextHealthCheckTime;
int healthCheckTickTime;
int healthCheckTickCount;
int nextPlayerPushTime;
// the first person view values are always calculated, even
// if a third person view is used
idVec3 firstPersonViewOrigin;
idMat3 firstPersonViewAxis;
idMat3 vehicleEyeAxis;
idVec3 vehicleEyeOrigin;
idAngles lastVehicleViewAngles;
int lastVehicleViewAnglesChange;
int oobDamageInterval;
void ToggleCommandMap( void );
int GetWeaponSwitchTimeout( void ) const { return weaponSwitchTimeout; }
void SetWeaponSelectionItemIndex( int index ) { weaponSelectionItemIndex = index; }
void SetVehicleCameraMode( int viewMode, bool resetAngles, bool force );
void CycleVehicleCameraMode( void );
void SwapVehiclePosition( void );
void DoActivate( void );
void DoWeapNext( void );
void DoWeapPrev( void );
void SetActiveTask( taskHandle_t task );
void UpdateActiveTask( void );
void SetManualTaskSelection( bool value ) { playerFlags.manualTaskSelection = value; }
bool GetManualTaskSelection( void ) { return playerFlags.manualTaskSelection; }
taskHandle_t GetActiveTaskHandle( void ) const { return activeTask; }
sdPlayerTask* GetActiveTask( void ) const;
void SelectNextTask();
virtual void GetTaskName( idWStr& out ) { out = userInfo.wideName; }
void UpdatePopupGuiInfo( void );
bool UpdateCrosshairInfo( idPlayer* player, sdCrosshairInfo& info );
virtual sdTeamInfo* GetGameTeam( void ) const;
public:
CLASS_PROTOTYPE( idPlayer );
idPlayer();
virtual ~idPlayer();
void Spawn( void );
void Think( void );
virtual void Hide( void );
virtual void Show( void );
void Init( bool setWeapon );
void LinkScriptVariables( void );
void SetupWeaponEntity( void );
void SetupWeaponEntity( int spawnId );
void SpawnFromSpawnSpot( void );
void OnRespawn( bool revive, bool parachute, int respawnTime, bool forced );
void SpawnToPoint( const idVec3& spawnOrigin, const idAngles& spawnAngles, bool revive, bool parachute );
void UserInfoChanged( void );
const userInfo_t& GetUserInfo( void ) const { return userInfo; }
// for very specific usage. != GetPhysics()
idPhysics_Player& GetPlayerPhysics( void ) { return physicsObj; }
const idPhysics_Player& GetPlayerPhysics( void ) const { return physicsObj; }
idWeapon* GetWeapon( void ) { return weapon.GetEntity(); }
const idWeapon* GetWeapon( void ) const { return weapon.GetEntity(); }
void UpdateConditions( void );
void SetViewAngles( const idAngles &angles );
virtual void SetAxis( const idMat3 &axis );
virtual void SetOrigin( const idVec3 &org );
virtual void SetPosition( const idVec3 &org, const idMat3 &axis );
// delta view angles to allow movers to rotate the view of the player
void UpdateDeltaViewAngles( const idAngles &angles );
virtual bool Collide( const trace_t &collision, const idVec3 &velocity, int bodyId );
virtual void SetHealth( int count );
virtual void SetMaxHealth( int count );
virtual int GetHealth( void ) const { return health; }
virtual int GetMaxHealth( void ) const { return maxHealth; }
virtual void DisableClip( bool activateContacting = true );
virtual void EnableClip( void );
void GetHeadModelCenter( idVec3& output );
float GetDamageScaleForTrace( const trace_t& t, const idVec3& traceDirection, locationDamageArea_t& area );
void CalcDamagePoints( idEntity *inflictor, idEntity *attacker, const sdDeclDamage* damageDecl,
const float damageScale, const trace_t* collision, float& _health, const idVec3& dir, bool& headshot );
virtual void DamageFeedback( idEntity *victim, idEntity *inflictor, int oldHealth, int newHealth, const sdDeclDamage* damageDecl, bool headshot );
virtual void Damage( idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const sdDeclDamage* damage, const float damageScale, const trace_t* collision, bool forceKill = false );
#ifdef PLAYER_DAMAGE_LOG
void LogDamage( int damage, const sdDeclDamage* damageDecl );
void UpdateDamageLog( void );
void ClearDamageLog( void );
void InitDamageLog( void );
static bool DamageLogModelCallback( renderEntity_t *renderEntity, const renderView_t *renderView, int& lastGameModifiedTime );
#endif // PLAYER_DAMAGE_LOG
void UpdateCombatModel( void );
void WriteStats( void );
virtual void UpdateKillStats( idPlayer* player, const sdDeclDamage* damageDecl, bool headshot );
void CalcLifeStats( void );
void SendLifeStatsMessage( int statIndex, const sdPlayerStatEntry::statValue_t& oldValue, const sdPlayerStatEntry::statValue_t& newValue );
void HandleLifeStatsMessage( int statIndex, const sdPlayerStatEntry::statValue_t& oldValue, const sdPlayerStatEntry::statValue_t& newValue );
void Kill( idEntity* killer, bool noBody = false, const sdDeclDamage* damage = NULL, const sdDeclDamage* applyDamage = NULL );
void OnKilled( idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location );
virtual void Killed( idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location, const sdDeclDamage* damageDecl );
virtual bool UpdateAnimationControllers( void );
void Obituary( idEntity* killer, const sdDeclDamage* damageDecl );
renderView_t * GetRenderView( void );
void SetupDeploymentView( renderView_t& rView );
void CalculateRenderView( void ); // called every tic by player code
void CalculateFirstPersonView( bool fullUpdate );
void SetTeleportEntity( sdTeleporter* teleport );
sdTeleporter* GetTeleportEntity( void ) { return teleportEntity; }
void WeaponFireFeedback( const weaponFeedback_t& feedback );
static float DefaultFov( void );
float CalcFov( void );
void CalculateViewWeaponPos( idVec3 &origin, idMat3 &axis, bool ignorePitch );
idVec3 GetEyePosition( void ) const;
void GetViewPos( idVec3 &origin, idMat3 &axis ) const;
void GetRenderViewAxis( idMat3 &axis ) const;
void OffsetThirdPersonView( float angle, float range, float height, bool clip, renderView_t& rView );
bool CalculateLookAtView( idPlayer* other, renderView_t& rView, bool doTraceCheck = false, float maxDist = -1.0f );
void UpdatePausedObjectiveView();
void UpdateBriefingView();
bool CanGetClass( const sdDeclPlayerClass* pc );
bool Give( const char *statname, const char *value );
bool GiveClass( const char* classname );
void ChangeClass( const sdDeclPlayerClass* pc, int classOption );
bool GivePackage( const sdDeclItemPackage* package );
void GiveClassProficiency( float count, const char* reason );
int Heal( int count );
void OnHealed( int oldHealth, int health );
bool IsWeaponValid( void );
void Reload( void );
void NextWeapon( bool safe = false );
void PrevWeapon( void );
void SelectWeapon( int num, bool force );
void UseWeaponAmmo( int modIndex );
int AmmoForWeapon( int modIndex );
void UseAmmo( ammoType_t type, int amount );
void LowerWeapon( void );
void RaiseWeapon( void );
void WeaponLoweringCallback( void );
void WeaponRisingCallback( void );
// deployment stuff
void EnterDeploymentMode( void );
void ExitDeploymentMode( void );
deployResult_t CheckBoundsForDeployment( const deployMaskExtents_t& extents, const sdDeployMaskInstance& mask, const sdDeclDeployableObject* deploymentObject, const sdPlayZone* pz );
deployResult_t GetDeployResult( idVec3& point, const sdDeclDeployableObject* deploymentObject );
deployResult_t CheckDeployPosition( idVec3& point, const sdDeclDeployableObject* deploymentObject );
bool GetDeployPosition( idVec3& point );
static void DrawLocalPlayerAttitude( sdUserInterfaceLocal* ui, float x, float y, float w, float h );
static void ZoomInCommandMap_f( const idCmdArgs& args );
static void ZoomOutCommandMap_f( const idCmdArgs& args );
static void SetupCommandMapZoom( void );
idEntity* GetEnemy( void );
void ClearTargetLock( void );
void UpdateTargetLock( void );
bool CheckTargetLockValid( idEntity* entity, const sdWeaponLockInfo* lockInfo );
bool CheckTargetCanLock( idEntity* target, float boundsScale, float& distance, const idFrustum& frustum );
const sdCrosshairInfo& GetCrosshairInfo( bool doTrace );
const sdCrosshairInfo& GetCrosshairInfoDirect( void ) { return crosshairInfo; }
void UpdateVisibility( void );
void PerformImpulse( int impulse );
void Spectate( void );
void UpdateHud( void );
void UpdatePlayerKills( int victimNum, idEntity *client );
bool IsCamping( void );
virtual void SetGameTeam( sdTeamInfo* team );
bool IsTeam( const sdTeamInfo* _team ) const { return ( team != NULL ) && ( team == _team ); }
bool IsSpectating( void ) const;
bool IsSpectator( void ) const;
// New Inventory System
sdInventory& GetInventory( void ) { return inventoryExt; }
const sdInventory& GetInventory( void ) const { return inventoryExt; }
// Proficiency Stuff
sdProficiencyTable& GetProficiencyTable( void ) { return gameLocal.GetProficiencyTable( entityNumber ); }
const sdProficiencyTable& GetProficiencyTable( void ) const { return gameLocal.GetProficiencyTable( entityNumber ); }
const sdDeclRating* GetRating( void ) const { return rating; }
void OnProficiencyGain( int index, float count, const char* reason );
void OnProficiencyLevelGain( const sdDeclProficiencyType* type, int oldLevel, int newLevel );
void CalculateView( void );
void SetRemoteCamera( idEntity* other, bool force );
idEntity* GetRemoteCamera( void ) { return remoteCamera.GetEntity(); }
virtual bool GetPhysicsToSoundTransform( idVec3 &origin, idMat3 &axis );
virtual void UpdateModelTransform( void );
virtual void UpdatePredictionErrorDecay( void );
virtual void OnNewOriginRead( const idVec3& newOrigin );
virtual void OnNewAxesRead( const idMat3& newAxes );
virtual void ResetPredictionErrorDecay( const idVec3* origin = NULL, const idMat3* axes = NULL );
void ResetAntiLag( void );
virtual bool ClientReceiveEvent( int event, int time, const idBitMsg &msg );
// server side work for in/out of spectate. takes care of spawning it into the world as well
void ServerSpectate( void );
bool OnLadder( void ) const;
void UpdatePlayerIcons( void );
bool GetPlayerIcon( idPlayer* viewer, sdPlayerDisplayIcon& icon, const sdWorldToScreenConverter& converter );
void FlashPlayerIcon( void );
bool IsObscuredBySmoke( idPlayer* viewer );
void SetLagged( bool lagged );
void SetGodMode( bool god );
void UpdateGodIcon();
void SetClientWeaponLock( bool lock ) { playerFlags.clientWeaponLock = lock; }
void SetNoClip( bool noclip );
void SetInGame( bool inGame );
void SetWantSpectate( bool want ) { playerFlags.wantSpectate = want; }
void SetInhibitGuis( bool inhibit ) { playerFlags.inhibitGUIs = inhibit; }
bool GetInhibitGuis() const { return playerFlags.inhibitGUIs; }
bool GetGodMode( void ) const { return playerFlags.godmode; }
bool GetNoClip( void ) const { return playerFlags.noclip; }
bool GetWantSpectate( void ) const { return !gameLocal.isClient && playerFlags.wantSpectate; }
bool GetIsLagged( void ) const { return playerFlags.isLagged; }
bool GetSniperAOR( void ) const { return playerFlags.sniperAOR; }
bool GetTargetLocked( void ) const { return playerFlags.targetLocked; }
bool IsInLimbo( void ) const { return playerFlags.forceRespawn; }
bool IsDead( void ) const { return health <= 0 && !IsInLimbo() && !GetWantSpectate() && !IsSpectator(); }
bool IsInPlayZone( void ) const { return playerFlags.inPlayZone; }
bool IsInvulernable( void ) const { return playerFlags.noclip || playerFlags.godmode || invulnerableEndTime > gameLocal.time; }
bool IsBeingBriefed() const;
void SetInvulnerableEndTime( int time );
void SetGameStartTime( int time );
void LogTimePlayed( void );
void Suicide( void );
virtual void OnUpdateVisuals( void );
bool ServerDeploy( const sdDeclDeployableObject* object, float rotation, int delayMS );
const sdWeaponLockInfo* GetCurrentLockInfo( void );
void SetTargetEntity( idEntity* entity );
void AddLocationalDamageInfo( const locationalDamageInfo_t& ldi ) { locationalDamageInfo.Alloc() = ldi; }
void RemoveLocationalDamageInfo( void ) { locationalDamageInfo.Clear(); }
locationDamageArea_t LocationalDamageAreaForString( const char* const str ) const;
void SetWeaponSpreadInfo( void ) const;
playerTaskList_t& GetTaskList( void ) { return availableTasks; }
void SetSuppressPredictionReset( bool reset ) { suppressPredictionReset = reset; }
void GetAORView( idVec3& origin, idMat3& axis );
const idVec3& GetLastPredictionErrorDecayOrigin( void );
private:
// Gordon: vehicle stuff
idEntityPtr< idEntity > proxyEntity;
int proxyPositionId;
int proxyViewMode;
sdInventory inventoryExt;
sdCrosshairInfo crosshairInfo;
int lastCrosshairTraceTime;
bool crosshairEntActivate;
float speedModifier;
float sprintScale;
float swayScale;
float damageXPScale;
jointHandle_t hipJoint;
jointHandle_t chestJoint;
jointHandle_t torsoJoint;
jointHandle_t headJoint;
struct arm_t {
jointHandle_t shoulderJoint;
jointHandle_t elbowJoint;
jointHandle_t handJoint;
jointHandle_t footJoint; // Gordon: we have feet on our arms, honest
};
arm_t arms[ 2 ];
jointHandle_t headModelJoint;
idVec3 headModelOffset;
taskHandle_t activeTask;
playerTaskList_t availableTasks;
idList< float > damageAreasScale; // FIXME: Move to the player class
idList< locationalDamageInfo_t > locationalDamageInfo; // FIXME: Move to the player class
idPhysics_Player physicsObj; // player physics
int bobFoot;
float bobFrac;
float bobfracsin;
int bobCycle; // for view bobbing and footstep generation
float xyspeed;
int stepUpTime;
float stepUpDelta;
float idealLegsYaw;
float legsYaw;
float oldViewYaw;
idAngles viewBobAngles;
idVec3 viewBob;
int health;
int maxHealth;
int teamDamageDone;
const idDeclSkin* skin;
jointHandle_t leftFootJH, rightFootJH;
idEntityPtr< idEntity > remoteCamera;
idVec3 remoteCameraViewOffset;
idEntityPtr< idPlayer > killer;
int killerTime;
idEntityPtr< sdTeleporter > teleportEntity;
int nextTeleportTime;
int lastTeleportTime;
// if there is a focusGUIent, the attack button will be changed into mouse clicks
idEntityPtr< idEntity > focusGUIent;
guiHandle_t focusUI; // focusGUIent->renderEntity.gui, gui2, or gui3
int focusTime;
int lastDamageDecl;
idVec3 lastDamageDir;
int lastDamageLocation;
sdPredictionErrorDecay_Origin predictionErrorDecay_Origin;
sdPredictionErrorDecay_Angles predictionErrorDecay_Angles;
bool suppressPredictionReset;
// mp
int nextSpectateChange;
int combatState;
int nextBattleSenseBonusTime;
idPlayerIcon playerIcon;
int playerIconFlashTime;
bool lastWeaponMenuState;
int lastWeaponSwitchPos;
bool enableWeaponSwitchTimeout;
int lastTimelineTime;
// script callback functions
const sdProgram::sdFunction* raiseWeaponFunction;
const sdProgram::sdFunction* lowerWeaponFunction;
const sdProgram::sdFunction* reloadWeaponFunction;
const sdProgram::sdFunction* weaponFiredFunction;
const sdProgram::sdFunction* onProficiencyChangedFunction;
const sdProgram::sdFunction* onSpawnFunction;
const sdProgram::sdFunction* onKilledFunction;
const sdProgram::sdFunction* onHitActivateFunction;
const sdProgram::sdFunction* onSetTeamFunction;
const sdProgram::sdFunction* onFullyKilledFunction;
const sdProgram::sdFunction* onPainFunction;
const sdProgram::sdFunction* onDisguisedFunction;
const sdProgram::sdFunction* onConsumeHealthFunction;
const sdProgram::sdFunction* onConsumeStroyentFunction;
const sdProgram::sdFunction* onFireTeamJoinedFunction;
const sdProgram::sdFunction* onFireTeamBecomeLeader;
const sdProgram::sdFunction* onHealedFunction;
const sdProgram::sdFunction* onJumpFunction;
const sdProgram::sdFunction* onSendingVoice;
const sdProgram::sdFunction* sniperScopeUpFunc;
const sdProgram::sdFunction* needsParachuteFunc;
const sdProgram::sdFunction* isPantingFunc;
const idDeclSkin* viewSkin;
sdPlayerInteractiveInterface interactiveInterface;
float armor;
idStaticList< idEntityPtr< idEntity >, MAX_PLAYER_BIN_SIZE > entityBin;
idStaticList< idEntityPtr< idEntity >, MAX_PLAYER_BIN_SIZE > abilityEntityBin;
// model based sights
float sightFOV;
rvClientEntityPtr< sdClientAnimated > sight;
taskHandle_t lookAtTask;
#ifdef PLAYER_DAMAGE_LOG
struct damageLogInfo_t {
idVec3 location;
int time;
int damage;
const sdDeclDamage* damageDecl;
};
class sdDamageLogNumbers : public sdHardcodedParticleSystem {
public:
static const int MAX_CHARS = 256;
void Init( idPlayer* player );
void Update( idPlayer* player );
srfTriangles_t * GetTriSurf( void ) { return renderEntity.hModel->Surface( 0 )->geometry; }
};
struct damageLog_t {
idList< damageLogInfo_t > log;
sdDamageLogNumbers numbers;
};
damageLog_t damageLog;
const damageLog_t& GetDamageLog( void ) { return damageLog; }
bool sendingVoice;
#endif // PLAYER_DAMAGE_LOG
public:
virtual sdInteractiveInterface* GetInteractiveInterface( void ) { return &interactiveInterface; }
virtual void OnTeleportStarted( sdTeleporter* teleporter );
virtual void OnTeleportFinished( void );
virtual bool AllowTeleport( void ) const { return gameLocal.time > nextTeleportTime; }
void OnFireTeamJoined( sdFireTeam* newFireTeam );
void OnFireTeamDisbanded( void );
void OnBecomeFireTeamLeader( void );
void StopFiring( void );
void FireWeapon( void );
bool CanAttack( void );
void Weapon_Proxy( void );
void Weapon_Combat( void );
void Weapon_GUI( void );
void UpdateWeapon( void );
void UpdateSpectating( const usercmd_t& oldCmd );
void SpectateFreeFly( bool force ); // ignore the timeout to force when followed spec is no longer valid
void SpectateCycle( bool force = false, bool reverse = false );
void SpectateCrosshair( bool force = false );
idPlayer* GetNextSpectateClient( bool reverse = false ) const;
idPlayer* GetPrevSpectateClient( void ) const;
typedef enum {
SPECTATE_INVALID = -1,
SPECTATE_NEXT = 0,
SPECTATE_PREV,
SPECTATE_OBJECTIVE,
SPECTATE_POSITION,
SPECTATE_MAX
} spectateCommand_t;
void SpectateObjective( void );
void SpectateCommand( spectateCommand_t command, const idVec3& origin, const idAngles& angles );
void BobCycle( const idVec3 &pushVelocity );
void UpdateViewAngles( void );
void EvaluateControls( const usercmd_t& oldCmd );
void AdjustSpeed( void );
void AdjustBodyAngles( void );
void Move( const usercmd_t &usercmd, const idAngles &viewAngles );
void SetSpectateOrigin( void );
void SetStroyBombState( idEntity* bomb );
void ClearFocus( void );
void UpdateFocus( void );
bool InhibitGuiFocus( void );
guiHandle_t ActiveGui( void );
void ServerUseObject( void );
bool IsProne( void ) const;
bool IsCrouching( void ) const;
bool InhibitProne( void ) const;
bool InhibitSprint( void ) const;
const idDeclSkin* GetViewSkin( void ) const { return viewSkin; }
void ConsumeHealth( void );
void ConsumeStroyent( void );
float GetSightFOV( void ) const { return sightFOV; }
sdClientAnimated *GetSight( void ) { return sight.GetEntity(); }
void Event_GetButton( int key );
void Event_GetMove( void );
void Event_GetUserCmdAngles( void );
void Event_GetViewAngles( void );
void Event_SetViewAngles( const idVec3& angles );
void Event_GetCameraViewAngles( void );
void Event_GetRenderViewAngles( void );
void Event_GetViewOrigin( void );
void Event_GetWeaponEntity( void );
void Event_IsGunHidden( void );
void Event_CreateIcon( const char* materialName, int priority, float timeout );
void Event_FreeIcon( qhandle_t handle );
void Event_Freeze( bool freeze );
void Event_FreezeTurning( bool freeze );
void Event_SetRemoteCamera( idEntity* other );
void Event_SetRemoteCameraViewOffset( const idVec3& offset );
void Event_GetViewingEntity( void );
void Event_SetSkin( const char *skinname );
void Event_GiveProficiency( int index, float scale, idScriptObject* object, const char* reason );
void Event_GiveClassProficiency( float count, const char* reason );
void Event_Heal( int count );
void Event_Unheal( int count );
void Event_MakeInvulnerable( float len );
void Event_GiveClass( const char* classname );
void Event_GivePackage( const char* packageName );
void Event_SetClassOption( int optionIndex, int itemIndex );
void Event_SendToolTip( int toolTipIndex );
void Event_CancelToolTips( void );
void Event_SetWeapon( const char* weaponName, bool instant );
void Event_SelectBestWeapon( bool allowCurrent );
void Event_GetCurrentWeapon( void );
void Event_HasWeapon( const char* weaponName );
void Event_GetVehicle( void );
void Event_DeployOptionTitle( int index );
void Event_NumDeployOptions( void );
void Event_GetAmmoFraction( void );
void Event_GetUserName( void );
void Event_GetCleanUserName( void );
void Event_GetClassName( void );
void Event_GetCachedClassName( void );
void Event_GetPlayerClass( void );
void Event_GetShortRank( void );
void Event_GetRank( void );
void Event_GetProficiencyLevel( int index );
void Event_GetXP( int index, bool base );
void Event_GetMaxHealth( void );
void Event_GetCrosshairEntity( void );
void Event_GetCrosshairDistance( bool needValidInfo );
void Event_GetCrosshairEndPos( void );
void Event_GetCrosshairStartTime( void );
void Event_DeploymentMode( void );
void Event_ExitDeploymentMode( void );
void Event_GetDeployResult( int deployObjectIndex );
void Event_GetDeploymentActive( void );
void Event_SetSpawnPoint( idEntity* other );
void Event_GetSpawnPoint( void );
void Event_SetSpeedModifier( float value );
void Event_SetSprintScale( float value );
void Event_GetEnemy( void );
void Event_NeedsRevive( void );
void Event_IsInvulernable( void );
void Event_Revive( idEntity* other, float healthScale );
void Event_SetProxyEntity( idEntity* proxy, int positionId );
void Event_GetProxyEntity( void );
void Event_GetProxyAllowWeapon( void );
void Event_SetSniperAOR( bool enabled );
void Event_Enter( idEntity* ent );
void Event_GetKilledTime( void );
void Event_ForceRespawn( void );
void Event_GetClassKey( const char* key );
void Event_SetAmmo( ammoType_t ammoType, int amount );
void Event_GetAmmo( ammoType_t ammoType );
void Event_SetMaxAmmo( ammoType_t ammoType, int amount );
void Event_GetMaxAmmo( ammoType_t ammoType );
void Event_SetTargetTimeScale( float scale );
void Event_DisableShadows( bool value );
void Event_GetRemoteCamera( void );
void Event_DisableSprint( bool disable );
void Event_DisableRun( bool disable );
void Event_DisableFootsteps( bool disable );
void Event_DisableFallingDamage( bool disable );
void Event_Disguise( idEntity* other );
void Event_GetDisguiseClient( void );
void Event_IsDisguised( void );
void Event_SetSpectateClient( idEntity* other );
void Event_SetViewSkin( const char *name );
void Event_GetViewSkin( void );
void Event_SetGUIClipIndex( int index );
void Event_GetDeploymentRequest( void );
void Event_GetDeploymentPosition( void );
void Event_Hide( void );
void Event_Show( void );
void Event_GetActiveTask( void );
void BinAddEntity( idEntity* other );
void BinRemoveEntity( idEntity* other );
void Event_BinAdd( idEntity* other );
void Event_BinGet( int index );
void Event_BinGetSize( void );
void Event_BinRemove( idEntity* other );
void BinCleanup();
idEntity* BinFindEntityOfType( const idDeclEntityDef* type );
void Event_SetArmor( float _armor );
void Event_GetArmor( void );
void Event_InhibitGuis( bool inhibit );
void Event_GetPostArmFindBestWeapon( void );
void Event_SameFireTeam( idEntity* other );
void Event_IsFireTeamLeader();
void Event_IsLocalPlayer( void );
void Event_IsToolTipPlaying( void );
void Event_IsSinglePlayerToolTipPlaying( void );
void Event_SetPlayerChargeOrigin( idEntity *self );
void Event_SetPlayerChargeArmed( bool chargeArmed, idEntity *self );
void Event_SetPlayerItemState( idEntity *self, bool destroy );
void Event_SetPlayerGrenadeState( idEntity *self, bool destroy );
void Event_SetPlayerMineState( idEntity *self, bool destroy, bool spotted );
void Event_SetPlayerMineArmed( bool chargeArmed, idEntity *self, bool isVisible );
void Event_SetPlayerSupplyCrateState( idEntity *self, bool destroy );
void Event_SetPlayerAirStrikeState( idEntity *self, bool destroy, bool strikeOnWay );
void Event_SetPlayerCovertToolState( idEntity *self, bool destroy );
void Event_SetPlayerSpawnHostState( idEntity *self, bool destroy );
void Event_SetSmokeNadeState( idEntity *self );
void Event_SetArtyAttackLocation( const idVec3& vector, int artyType );
void Event_SetPlayerKillTarget( idEntity* killTarget );
void Event_SetPlayerRepairTarget( idEntity* repairTarget );
void Event_SetPlayerPickupRequestTime( idEntity* pickUpTarget );
void Event_SetPlayerCommandRequestTime( void );
void Event_SetTeleporterState( bool destroy );
void Event_SetForceShieldState( bool destroy, idEntity* self );
void Event_SetRepairDroneState( bool destroy );
void Event_IsBot();
void Event_SetBotEscort( idEntity* botEscort );
void Event_SetPlayerSpawnHostTarget( idEntity* spawnHostTarget );
void Event_ResetTargetLock( void );
void Event_IsLocking( void );
void Event_EnableClientModelSights( const char* name );
void Event_DisableClientModelSights( void );
void Event_GetCrosshairTitle( bool allowDisguise );
void Event_GetTeamDamageDone( void );
void Event_SetTeamDamageDone( int value );
void Event_AdjustDeathYaw( float value );
void Event_SetCarryingObjective( bool isCarrying );
void Event_AddDamageEvent( int time, float angle, float damage, bool updateDirection );
void Event_IsInLimbo( void );
};
#endif /* !__GAME_PLAYER_H__ */