1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093 |
- /*
- ===========================================================================
- Doom 3 GPL Source Code
- Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
- Doom 3 Source Code is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- Doom 3 Source Code is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #ifndef __GAME_PLAYER_H__
- #define __GAME_PLAYER_H__
- /*
- ===============================================================================
- Player entity.
-
- ===============================================================================
- */
- extern const idEventDef EV_Player_GetButtons;
- extern const idEventDef EV_Player_GetMove;
- extern const idEventDef EV_Player_GetViewAngles;
- extern const idEventDef EV_Player_EnableWeapon;
- extern const idEventDef EV_Player_DisableWeapon;
- extern const idEventDef EV_Player_ExitTeleporter;
- extern const idEventDef EV_Player_SelectWeapon;
- extern const idEventDef EV_SpectatorTouch;
- const float THIRD_PERSON_FOCUS_DISTANCE = 512.0f;
- const int LAND_DEFLECT_TIME = 150;
- const int LAND_RETURN_TIME = 300;
- const int FOCUS_TIME = 300;
- const int FOCUS_GUI_TIME = 500;
- #ifdef _D3XP
- const int MAX_WEAPONS = 32;
- #else
- const int MAX_WEAPONS = 16;
- #endif
- const int DEAD_HEARTRATE = 0; // fall to as you die
- const int LOWHEALTH_HEARTRATE_ADJ = 20; //
- const int DYING_HEARTRATE = 30; // used for volumen calc when dying/dead
- const int BASE_HEARTRATE = 70; // default
- const int ZEROSTAMINA_HEARTRATE = 115; // no stamina
- const int MAX_HEARTRATE = 130; // maximum
- const int ZERO_VOLUME = -40; // volume at zero
- const int DMG_VOLUME = 5; // volume when taking damage
- const int DEATH_VOLUME = 15; // volume at death
- const int SAVING_THROW_TIME = 5000; // maximum one "saving throw" every five seconds
- const int ASYNC_PLAYER_INV_AMMO_BITS = idMath::BitsForInteger( 999 ); // 9 bits to cover the range [0, 999]
- const int ASYNC_PLAYER_INV_CLIP_BITS = -7; // -7 bits to cover the range [-1, 60]
- struct idItemInfo {
- idStr name;
- idStr icon;
- };
- struct idObjectiveInfo {
- idStr title;
- idStr text;
- idStr screenshot;
- };
- struct idLevelTriggerInfo {
- idStr levelName;
- idStr triggerName;
- };
- // powerups - the "type" in item .def must match
- enum {
- BERSERK = 0,
- INVISIBILITY,
- MEGAHEALTH,
- ADRENALINE,
- #ifdef _D3XP
- INVULNERABILITY,
- HELLTIME,
- ENVIROSUIT,
- //HASTE,
- ENVIROTIME,
- #endif
- MAX_POWERUPS
- };
- // powerup modifiers
- enum {
- SPEED = 0,
- PROJECTILE_DAMAGE,
- MELEE_DAMAGE,
- MELEE_DISTANCE
- };
- // influence levels
- enum {
- INFLUENCE_NONE = 0, // none
- INFLUENCE_LEVEL1, // no gun or hud
- INFLUENCE_LEVEL2, // no gun, hud, movement
- INFLUENCE_LEVEL3, // slow player movement
- };
- #ifdef _D3XP
- typedef struct {
- int ammo;
- int rechargeTime;
- char ammoName[128];
- } RechargeAmmo_t;
- typedef struct {
- char name[64];
- idList<int> toggleList;
- } WeaponToggle_t;
- #endif
- class idInventory {
- public:
- int maxHealth;
- int weapons;
- int powerups;
- int armor;
- int maxarmor;
- int ammo[ AMMO_NUMTYPES ];
- int clip[ MAX_WEAPONS ];
- int powerupEndTime[ MAX_POWERUPS ];
- #ifdef _D3XP
- RechargeAmmo_t rechargeAmmo[ AMMO_NUMTYPES ];
- #endif
- // mp
- int ammoPredictTime;
- int deplete_armor;
- float deplete_rate;
- int deplete_ammount;
- int nextArmorDepleteTime;
- int pdasViewed[4]; // 128 bit flags for indicating if a pda has been viewed
- int selPDA;
- int selEMail;
- int selVideo;
- int selAudio;
- bool pdaOpened;
- bool turkeyScore;
- idList<idDict *> items;
- idStrList pdas;
- idStrList pdaSecurity;
- idStrList videos;
- idStrList emails;
- bool ammoPulse;
- bool weaponPulse;
- bool armorPulse;
- int lastGiveTime;
- idList<idLevelTriggerInfo> levelTriggers;
- idInventory() { Clear(); }
- ~idInventory() { Clear(); }
- // save games
- void Save( idSaveGame *savefile ) const; // archives object for save game file
- void Restore( idRestoreGame *savefile ); // unarchives object from save game file
- void Clear( void );
- void GivePowerUp( idPlayer *player, int powerup, int msec );
- void ClearPowerUps( void );
- void GetPersistantData( idDict &dict );
- void RestoreInventory( idPlayer *owner, const idDict &dict );
- bool Give( idPlayer *owner, const idDict &spawnArgs, const char *statname, const char *value, int *idealWeapon, bool updateHud );
- void Drop( const idDict &spawnArgs, const char *weapon_classname, int weapon_index );
- ammo_t AmmoIndexForAmmoClass( const char *ammo_classname ) const;
- int MaxAmmoForAmmoClass( idPlayer *owner, const char *ammo_classname ) const;
- int WeaponIndexForAmmoClass( const idDict & spawnArgs, const char *ammo_classname ) const;
- ammo_t AmmoIndexForWeaponClass( const char *weapon_classname, int *ammoRequired );
- const char * AmmoPickupNameForIndex( ammo_t ammonum ) const;
- void AddPickupName( const char *name, const char *icon, idPlayer* owner ); //_D3XP
- int HasAmmo( ammo_t type, int amount );
- bool UseAmmo( ammo_t type, int amount );
- int HasAmmo( const char *weapon_classname, bool includeClip = false, idPlayer* owner = NULL ); // _D3XP
- void SetAmmo( ammo_t type, int amount );
- #ifdef _D3XP
- bool HasEmptyClipCannotRefill(const char *weapon_classname, idPlayer* owner);
- #endif
- void UpdateArmor( void );
- int nextItemPickup;
- int nextItemNum;
- int onePickupTime;
- idList<idItemInfo> pickupItemNames;
- idList<idObjectiveInfo> objectiveNames;
- #ifdef _D3XP
- void InitRechargeAmmo(idPlayer *owner);
- void RechargeAmmo(idPlayer *owner);
- bool CanGive( idPlayer *owner, const idDict &spawnArgs, const char *statname, const char *value, int *idealWeapon );
- #endif
- };
- typedef struct {
- int time;
- idVec3 dir; // scaled larger for running
- } loggedAccel_t;
- typedef struct {
- int areaNum;
- idVec3 pos;
- } aasLocation_t;
- class idPlayer : public idActor {
- public:
- enum {
- EVENT_IMPULSE = idEntity::EVENT_MAXEVENTS,
- EVENT_EXIT_TELEPORTER,
- EVENT_ABORT_TELEPORTER,
- EVENT_POWERUP,
- EVENT_SPECTATE,
- #ifdef _D3XP
- EVENT_PICKUPNAME,
- #endif
- EVENT_MAXEVENTS
- };
- usercmd_t usercmd;
- class idPlayerView playerView; // handles damage kicks and effects
- bool noclip;
- bool godmode;
- bool spawnAnglesSet; // on first usercmd, we must set deltaAngles
- idAngles spawnAngles;
- idAngles viewAngles; // player view angles
- idAngles cmdAngles; // player cmd angles
- int buttonMask;
- int oldButtons;
- int oldFlags;
- int lastHitTime; // last time projectile fired by player hit target
- int lastSndHitTime; // MP hit sound - != lastHitTime because we throttle
- int lastSavingThrowTime; // for the "free miss" effect
- 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_ONGROUND;
- idScriptBool AI_ONLADDER;
- idScriptBool AI_DEAD;
- idScriptBool AI_RUN;
- idScriptBool AI_PAIN;
- idScriptBool AI_HARDLANDING;
- idScriptBool AI_SOFTLANDING;
- idScriptBool AI_RELOAD;
- idScriptBool AI_TELEPORT;
- idScriptBool AI_TURN_LEFT;
- idScriptBool AI_TURN_RIGHT;
- idScriptBool AI_CLAMBER;
- // inventory
- idInventory inventory;
- idEntityPtr<idWeapon> weapon;
- idUserInterface * hud; // MP: is NULL if not local player
- idUserInterface * objectiveSystem;
- bool objectiveSystemOpen;
- int weapon_soulcube;
- int weapon_pda;
- int weapon_fists;
- #ifdef _D3XP
- int weapon_bloodstone;
- int weapon_bloodstone_active1;
- int weapon_bloodstone_active2;
- int weapon_bloodstone_active3;
- bool harvest_lock;
- #endif
- int heartRate;
- idInterpolate<float> heartInfo;
- int lastHeartAdjust;
- int lastHeartBeat;
- int lastDmgTime;
- int deathClearContentsTime;
- bool doingDeathSkin;
- int lastArmorPulse; // lastDmgTime if we had armor at time of hit
- float stamina;
- float healthPool; // amount of health to give over time
- int nextHealthPulse;
- bool healthPulse;
- bool healthTake;
- int nextHealthTake;
- bool hiddenWeapon; // if the weapon is hidden ( in noWeapons maps )
- idEntityPtr<idProjectile> soulCubeProjectile;
- // mp stuff
- #ifdef _D3XP
- static idVec3 colorBarTable[ 8 ];
- #else
- static idVec3 colorBarTable[ 5 ];
- #endif
- int spectator;
- idVec3 colorBar; // used for scoreboard and hud display
- int colorBarIndex;
- bool scoreBoardOpen;
- bool forceScoreBoard;
- bool forceRespawn;
- bool spectating;
- int lastSpectateTeleport;
- bool lastHitToggle;
- bool forcedReady;
- bool wantSpectate; // from userInfo
- bool weaponGone; // force stop firing
- bool useInitialSpawns; // toggled by a map restart to be active for the first game spawn
- int latchedTeam; // need to track when team gets changed
- int tourneyRank; // for tourney cycling - the higher, the more likely to play next - server
- int tourneyLine; // client side - our spot in the wait line. 0 means no info.
- int spawnedTime; // when client first enters the game
- #ifdef CTF
- bool carryingFlag; // is the player carrying the flag?
- #endif
-
- idEntityPtr<idEntity> teleportEntity; // while being teleported, this is set to the entity we'll use for exit
- int teleportKiller; // entity number of an entity killing us at teleporter exit
- bool lastManOver; // can't respawn in last man anymore (srv only)
- bool lastManPlayAgain; // play again when end game delay is cancelled out before expiring (srv only)
- bool lastManPresent; // true when player was in when game started (spectators can't join a running LMS)
- bool isLagged; // replicated from server, true if packets haven't been received from client.
- bool isChatting; // replicated from server, true if the player is chatting.
- // timers
- int minRespawnTime; // can respawn when time > this, force after g_forcerespawn
- int maxRespawnTime; // force respawn after this time
- // the first person view values are always calculated, even
- // if a third person view is used
- idVec3 firstPersonViewOrigin;
- idMat3 firstPersonViewAxis;
- idDragEntity dragEntity;
- #ifdef _D3XP
- idFuncMountedObject * mountedObject;
- idEntityPtr<idLight> enviroSuitLight;
- bool healthRecharge;
- int lastHealthRechargeTime;
- int rechargeSpeed;
- float new_g_damageScale;
- bool bloomEnabled;
- float bloomSpeed;
- float bloomIntensity;
- //int hazeStartTime;
- //int hazeEndTime;
- //bool hazeActive;
- #endif
- public:
- CLASS_PROTOTYPE( idPlayer );
- idPlayer();
- virtual ~idPlayer();
- void Spawn( void );
- void Think( void );
- // save games
- void Save( idSaveGame *savefile ) const; // archives object for save game file
- void Restore( idRestoreGame *savefile ); // unarchives object from save game file
- virtual void Hide( void );
- virtual void Show( void );
- void Init( void );
- void PrepareForRestart( void );
- virtual void Restart( void );
- void LinkScriptVariables( void );
- void SetupWeaponEntity( void );
- void SelectInitialSpawnPoint( idVec3 &origin, idAngles &angles );
- void SpawnFromSpawnSpot( void );
- void SpawnToPoint( const idVec3 &spawn_origin, const idAngles &spawn_angles );
- void SetClipModel( void ); // spectator mode uses a different bbox size
- void SavePersistantInfo( void );
- void RestorePersistantInfo( void );
- void SetLevelTrigger( const char *levelName, const char *triggerName );
- bool UserInfoChanged( bool canModify );
- idDict * GetUserInfo( void );
- bool BalanceTDM( void );
- void CacheWeapons( void );
- void EnterCinematic( void );
- void ExitCinematic( void );
- bool HandleESC( void );
- bool SkipCinematic( void );
- void UpdateConditions( void );
- void SetViewAngles( const idAngles &angles );
- void Event_lerpviewangle( const idVec3 &pos, int movetime );
- // 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 );
- virtual void GetAASLocation( idAAS *aas, idVec3 &pos, int &areaNum ) const;
- virtual void GetAIAimTargets( const idVec3 &lastSightPos, idVec3 &headPos, idVec3 &chestPos );
- virtual void DamageFeedback( idEntity *victim, idEntity *inflictor, int &damage );
- void CalcDamagePoints( idEntity *inflictor, idEntity *attacker, const idDict *damageDef,
- const float damageScale, const int location, int *health, int *armor );
- virtual void Damage( idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const char *damageDefName, const float damageScale, const int location );
- // use exitEntityNum to specify a teleport with private camera view and delayed exit
- virtual void Teleport( const idVec3 &origin, const idAngles &angles, idEntity *destination );
- void Kill( bool delayRespawn, bool nodamage );
- virtual void Killed( idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location );
- void StartFxOnBone(const char *fx, const char *bone);
- renderView_t * GetRenderView( void );
- void CalculateRenderView( void ); // called every tic by player code
- void CalculateFirstPersonView( void );
- void DrawHUD( idUserInterface *hud );
- void WeaponFireFeedback( const idDict *weaponDef );
- float DefaultFov( void ) const;
- float CalcFov( bool honorZoom );
- void CalculateViewWeaponPos( idVec3 &origin, idMat3 &axis );
- idVec3 GetEyePosition( void ) const;
- void GetViewPos( idVec3 &origin, idMat3 &axis ) const;
- void OffsetThirdPersonView( float angle, float range, float height, bool clip );
- bool Give( const char *statname, const char *value );
- bool GiveItem( idItem *item );
- void GiveItem( const char *name );
- void GiveHealthPool( float amt );
- //bc PUBLIC
- bool RemoveWeaponItem( const char *name );
- int GetWeaponByIndex( const char *name );
- void UseDeck( idEntity *target, idEntity *master );
- idUserInterface * deckGui;
- idEntityPtr<idEntity> deckEnt;
- idEntityPtr<idEntity> deckMaster;
- idListGUI * deckList;
- idEntityPtr<idEntity> deckScript;
- bool inDeck;
- void DebugMessage( const char *text );
- void StopClamber( void );
- int pickerState;
- idPicker pickerWeapon;
- idStr text_objective;
- int text_alarms;
- float text_missionclock;
- idEntityPtr<idEntity> launcherEnt;
- int attackTimer;
- bool attackHeld;
- idVec3 lastTracePos;
- bool DoFrob( idEntity *frobbee );
- idVec3 popcornPosition;
- int lastMoveTime; //for the demo time-out.
- idEntity * focusFrobEnt;
- void Event_setviewangle(idVec3 const &ang);
- void Event_viewlook( idVec3 const &org, float time, int backwards, int stayLocked );
- void Event_pressEnter( void );
- void Event_setFrozen( int value );
- void Event_ToggleBloom( int on );
- void Event_SetBloomParms( float speed, float intensity );
- void Event_ToggleHaze(int time, float value);
- bool isCasing;
- bool IsTourist();
- idUserInterface * commentaryScreen;
- bool toggleCommentary( int value, idStr text );
- bool commentaryActive;
- int nextCommentaryTime;
- bool commentaryMode;
- idListGUI * topfriendnameList;
- idListGUI * topfriendtimeList;
- float deckCurLerp;
- int deckLookLerp;
- float GetLookLerp(float value, float movetime);
- idAngles deckInitialViewAngles;
- idAngles deckFinalViewAngles;
- idVec3 deckInitialPosition;
- float viewlookMoveTime;
- float viewlookLerp;
- float viewlookCurLerp;
- idVec3 viewlookInitialPosition;
- idVec3 viewlookFinalPosition;
- bool viewlookActive;
- bool viewlookLocked;
- idAngles lerpviewInitialPosition;
- idAngles lerpviewFinalPosition;
- bool lerpviewActive;
- int lerpviewStarttime;
- int lerpviewEndtime;
- bool UnstickPlayer( void );
- void ExitDeck( bool forced );
- bool stickynotePending;
- //bc end public.
-
- bool GiveInventoryItem( idDict *item );
- void RemoveInventoryItem( idDict *item );
- bool GiveInventoryItem( const char *name );
- void RemoveInventoryItem( const char *name );
- idDict * FindInventoryItem( const char *name );
- void GivePDA( const char *pdaName, idDict *item );
- void GiveVideo( const char *videoName, idDict *item );
- void GiveEmail( const char *emailName );
- void GiveSecurity( const char *security );
- void GiveObjective( const char *title, const char *text, const char *screenshot );
- void CompleteObjective( const char *title );
- bool GivePowerUp( int powerup, int time );
- void ClearPowerUps( void );
- bool PowerUpActive( int powerup ) const;
- float PowerUpModifier( int type );
- int SlotForWeapon( const char *weaponName );
- void Reload( void );
- void NextWeapon( void );
- void NextBestWeapon( void );
- void PrevWeapon( void );
- void SelectWeapon( int num, bool force );
- void DropWeapon( bool died ) ;
- void StealWeapon( idPlayer *player );
- void AddProjectilesFired( int count );
- void AddProjectileHits( int count );
- void SetLastHitTime( int time );
- void LowerWeapon( void );
- void RaiseWeapon( void );
- void WeaponLoweringCallback( void );
- void WeaponRisingCallback( void );
- void RemoveWeapon( const char *weap );
- bool CanShowWeaponViewmodel( void ) const;
- void AddAIKill( void );
- void SetSoulCubeProjectile( idProjectile *projectile );
- void AdjustHeartRate( int target, float timeInSecs, float delay, bool force );
- void SetCurrentHeartRate( void );
- int GetBaseHeartRate( void );
- void UpdateAir( void );
- #ifdef _D3XP
- void UpdatePowerupHud();
- #endif
- virtual bool HandleSingleGuiCommand( idEntity *entityGui, idLexer *src );
- bool GuiActive( void ) { return focusGUIent != NULL; }
- void PerformImpulse( int impulse );
- void Spectate( bool spectate );
- void TogglePDA( void );
- void ToggleScoreboard( void );
- void RouteGuiMouse( idUserInterface *gui );
- void UpdateHud( void );
- const idDeclPDA * GetPDA( void ) const;
- const idDeclVideo * GetVideo( int index );
- void SetInfluenceFov( float fov );
- void SetInfluenceView( const char *mtr, const char *skinname, float radius, idEntity *ent );
- void SetInfluenceLevel( int level );
- int GetInfluenceLevel( void ) { return influenceActive; };
- void SetPrivateCameraView( idCamera *camView );
- idCamera * GetPrivateCameraView( void ) const { return privateCameraView; }
- void StartFxFov( float duration );
- void UpdateHudWeapon( bool flashWeapon = true );
- void UpdateHudStats( idUserInterface *hud );
- void UpdateHudAmmo( idUserInterface *hud );
- void Event_StopAudioLog( void );
- void StartAudioLog( void );
- void StopAudioLog( void );
- void ShowTip( const char *title, const char *tip, bool autoHide );
- void HideTip( void );
- bool IsTipVisible( void ) { return tipUp; };
- void ShowObjective( const char *obj );
- void HideObjective( void );
- virtual void ClientPredictionThink( void );
- virtual void WriteToSnapshot( idBitMsgDelta &msg ) const;
- virtual void ReadFromSnapshot( const idBitMsgDelta &msg );
- void WritePlayerStateToSnapshot( idBitMsgDelta &msg ) const;
- void ReadPlayerStateFromSnapshot( const idBitMsgDelta &msg );
- virtual bool ServerReceiveEvent( int event, int time, const idBitMsg &msg );
- virtual bool GetPhysicsToVisualTransform( idVec3 &origin, idMat3 &axis );
- virtual bool GetPhysicsToSoundTransform( idVec3 &origin, idMat3 &axis );
- virtual bool ClientReceiveEvent( int event, int time, const idBitMsg &msg );
- bool IsReady( void );
- bool IsRespawning( void );
- bool IsInTeleport( void );
- idEntity *GetInfluenceEntity( void ) { return influenceEntity; };
- const idMaterial *GetInfluenceMaterial( void ) { return influenceMaterial; };
- float GetInfluenceRadius( void ) { return influenceRadius; };
- // server side work for in/out of spectate. takes care of spawning it into the world as well
- void ServerSpectate( bool spectate );
- // for very specific usage. != GetPhysics()
- idPhysics *GetPlayerPhysics( void );
- void TeleportDeath( int killer );
- void SetLeader( bool lead );
- bool IsLeader( void );
- void UpdateSkinSetup( bool restart );
- bool OnLadder( void ) const;
- virtual void UpdatePlayerIcons( void );
- virtual void DrawPlayerIcons( void );
- virtual void HidePlayerIcons( void );
- bool NeedsIcon( void );
- #ifdef _D3XP
- void StartHealthRecharge(int speed);
- void StopHealthRecharge();
- idStr GetCurrentWeapon();
- bool CanGive( const char *statname, const char *value );
- void StopHelltime( bool quick = true );
- void PlayHelltimeStopSound();
- #endif
- #ifdef CTF
- void DropFlag( void ); // drop CTF item
- void ReturnFlag();
- virtual void FreeModelDef( void );
- #endif
- bool SelfSmooth( void );
- void SetSelfSmooth( bool b );
- //bc public.
- bool UseFrob( idEntity *entity, const char *scriptname );
- void Event_hudMessage( const char *message );
- void Event_usePicker( idEntity *ent );
- bool Event_isHolding( idEntity *ent );
- int Event_getAmmo( const char *ammoname );
- bool Event_useAmmo( const char *ammoname, int value );
- void Event_setAmmo( const char *ammoname, int value );
- void Event_writesticky( int value );
- void Event_setcasing( int value );
- void Event_setplayerskin( const char *skinname );
- bool Event_hasWeapon( const char* name );
- void ClearPowerup( int i );
- bool pickerHeld;
- idPhysics_Player physicsObj; // player physics
- void Event_setgodmode( int value );
- void Event_sethipclock( int value );
- bool Event_isInFOV( idVec3 const &position );
- void Event_killDeckthreads( void );
- void Event_forcestand( void );
- void Event_forcegui( const char *flag, int value );
- void Event_setCanFrob(int value);
- private:
- jointHandle_t hipJoint;
- jointHandle_t chestJoint;
- jointHandle_t headJoint;
-
- idList<aasLocation_t> aasLocation; // for AI tracking the player
- int bobFoot;
- float bobFrac;
- float bobfracsin;
- int bobCycle; // for view bobbing and footstep generation
- float xyspeed;
- int stepUpTime;
- float stepUpDelta;
- float idealLegsYaw;
- float legsYaw;
- bool legsForward;
- float oldViewYaw;
- idAngles viewBobAngles;
- idVec3 viewBob;
- int landChange;
- int landTime;
- int currentWeapon;
- int idealWeapon;
- int previousWeapon;
- int weaponSwitchTime;
- bool weaponEnabled;
- bool showWeaponViewModel;
- const idDeclSkin * skin;
- const idDeclSkin * powerUpSkin;
- idStr baseSkinName;
- const idDeclSkin * customskin;
- int numProjectilesFired; // number of projectiles fired
- int numProjectileHits; // number of hits on mobs
- bool airless;
- int airTics; // set to pm_airTics at start, drops in vacuum
- int lastAirDamage;
- bool gibDeath;
- bool gibsLaunched;
- idVec3 gibsDir;
- idInterpolate<float> zoomFov;
- idInterpolate<float> centerView;
- bool fxFov;
- float influenceFov;
- int influenceActive; // level of influence.. 1 == no gun or hud .. 2 == 1 + no movement
- idEntity * influenceEntity;
- const idMaterial * influenceMaterial;
- float influenceRadius;
- const idDeclSkin * influenceSkin;
- idCamera * privateCameraView;
- static const int NUM_LOGGED_VIEW_ANGLES = 64; // for weapon turning angle offsets
- idAngles loggedViewAngles[NUM_LOGGED_VIEW_ANGLES]; // [gameLocal.framenum&(LOGGED_VIEW_ANGLES-1)]
- static const int NUM_LOGGED_ACCELS = 16; // for weapon turning angle offsets
- loggedAccel_t loggedAccel[NUM_LOGGED_ACCELS]; // [currentLoggedAccel & (NUM_LOGGED_ACCELS-1)]
- int currentLoggedAccel;
- // if there is a focusGUIent, the attack button will be changed into mouse clicks
- idEntity * focusGUIent;
- idUserInterface * focusUI; // focusGUIent->renderEntity.gui, gui2, or gui3
- idAI * focusCharacter;
- int talkCursor; // show the state of the focusCharacter (0 == can't talk/dead, 1 == ready to talk, 2 == busy talking)
- int focusTime;
- idAFEntity_Vehicle * focusVehicle;
- idUserInterface * cursor;
- //bc private.
- int placerAngleIndex;
- idStr launcherName;
- void launcherAssign( void );
- bool wasOnLadder;
- bool pressedRemoteButton;
- int zoomCurrentFOV;
- int lastPopcornTime;
- void RevivePlayer();
- idAngles lastViewAngles; //for the demo time-out.
- idUserInterface * stickygui;
- // full screen guis track mouse movements directly
- int oldMouseX;
- int oldMouseY;
- idStr pdaAudio;
- idStr pdaVideo;
- idStr pdaVideoWave;
- int photosTaken;
- int photosMax;
- void snapPhoto( void );
- int getBestCameraPoint( void );
- void UpdatePhotoStatus( void );
- idAnimatedEntity * hipclock;
- int nextPlayerDeathlookTime;
- bool hipclockActive;
- int GetWeaponsAvailable( void );
- bool showingMap;
- bool writingStickynote;
- bool canFrob;
- int nextStickynoteTime;
-
-
- bool tipUp;
- bool objectiveUp;
- int lastDamageDef;
- idVec3 lastDamageDir;
- int lastDamageLocation;
- int smoothedFrame;
- bool smoothedOriginUpdated;
- idVec3 smoothedOrigin;
- idAngles smoothedAngles;
- #ifdef _D3XP
- idHashTable<WeaponToggle_t> weaponToggles;
- int hudPowerup;
- int lastHudPowerup;
- int hudPowerupDuration;
- #endif
- // mp
- bool ready; // from userInfo
- bool respawning; // set to true while in SpawnToPoint for telefrag checks
- bool leader; // for sudden death situations
- int lastSpectateChange;
- int lastTeleFX;
- unsigned int lastSnapshotSequence; // track state hitches on clients
- bool weaponCatchup; // raise up the weapon silently ( state catchups )
- int MPAim; // player num in aim
- int lastMPAim;
- int lastMPAimTime; // last time the aim changed
- int MPAimFadeTime; // for GUI fade
- bool MPAimHighlight;
- bool isTelefragged; // proper obituaries
- idPlayerIcon playerIcon;
- bool selfSmooth;
- void LookAtKiller( idEntity *inflictor, idEntity *attacker );
- void StopFiring( void );
- void FireWeapon( void );
- void Weapon_Combat( void );
- void Weapon_NPC( void );
- void Weapon_GUI( void );
- void UpdateWeapon( void );
- void UpdateSpectating( void );
- void SpectateFreeFly( bool force ); // ignore the timeout to force when followed spec is no longer valid
- void SpectateCycle( void );
- idAngles GunTurningOffset( void );
- idVec3 GunAcceleratingOffset( void );
- //bc private
- void UpdateFrob( void );
- void UpdatePlacer( void );
- void UpdatePlacerGround( void );
- void UpdatePlacerSticky( void );
- bool MakeStickymap( void );
- void UpdateCaserCamera( void );
- void UpdateHipclock( void );
- bool UpdateStickyRemoval( void );
- idEntity *placerEnt;
- idEntity *placerGhost;
- bool placerClearance;
- idVec3 placerFloatPos;
- bool CheckPlacerBoundCheck(idVec3 endPos);
-
-
- void UseObjects( void );
- void CrashLand( const idVec3 &oldOrigin, const idVec3 &oldVelocity );
- void BobCycle( const idVec3 &pushVelocity );
- void UpdateViewAngles( void );
- void EvaluateControls( void );
- void AdjustSpeed( void );
- void AdjustBodyAngles( void );
- void InitAASLocation( void );
- void SetAASLocation( void );
- void Move( void );
- void UpdatePowerUps( void );
- void UpdateDeathSkin( bool state_hitch );
-
- void SetSpectateOrigin( void );
- void ClearFocus( void );
- void UpdateFocus( void );
- void UpdateLocation( void );
- idUserInterface * ActiveGui( void );
- void UpdatePDAInfo( bool updatePDASel );
- int AddGuiPDAData( const declType_t dataType, const char *listName, const idDeclPDA *src, idUserInterface *gui );
- void ExtractEmailInfo( const idStr &email, const char *scan, idStr &out );
- void UpdateObjectiveInfo( void );
- #ifdef _D3XP
- bool WeaponAvailable( const char* name );
- #endif
- void UseVehicle( void );
-
- void Event_GetButtons( void );
- void Event_GetMove( void );
- void Event_GetViewAngles( void );
- void Event_StopFxFov( void );
- void Event_EnableWeapon( void );
- void Event_DisableWeapon( void );
- void Event_GetCurrentWeapon( void );
- void Event_GetPreviousWeapon( void );
- void Event_SelectWeapon( const char *weaponName, int flash );
- void Event_GetWeaponEntity( void );
- void Event_OpenPDA( void );
- void Event_PDAAvailable( void );
- void Event_InPDA( void );
- void Event_ExitTeleporter( void );
- void Event_HideTip( void );
- void Event_LevelTrigger( void );
- void Event_Gibbed( void );
-
- //bc
- void Event_settext_missionclock( float amount );
- void Event_settext_alarms( int amount );
- void Event_settext_obj( const char* text );
- void Event_getPickerState( void );
-
- void Event_stopPicker( void );
- void Event_useVehicle( idEntity *target, int value );
- void Event_setDeckScript( idEntity *ent );
- void Event_removeWeaponItem( const char* name );
- void Event_useDeck( idEntity *target, idEntity *master );
- void Event_getEyePos( void );
- void Event_getPlacerAngle( void );
- void Event_getPlacerAngleRaw( void );
- void Event_getPlacerPos( void );
- void Event_getPlacerFloatPos( void );
- void Event_setPlacerAngle( int value );
- void Event_getPlacerValid( void );
- void Event_debugMessage( const char *message );
-
- void Event_setNoclip( int value );
- void Event_getNoclip( void );
-
- idVec3 getPlacerAngle( void );
-
- void Event_inDeck( void );
- void Event_clamberScripted( const idVec3 &targetPos, float intensity, float movetime );
- int isFrozen;
- int hudmessageNextNum;
-
- #ifdef _D3XP //BSM: Event to remove inventory items. Useful with powercells.
- void Event_GiveInventoryItem( const char* name );
- void Event_RemoveInventoryItem( const char* name );
- void Event_GetIdealWeapon( void );
- void Event_WeaponAvailable( const char* name );
- void Event_SetPowerupTime( int powerup, int time );
- void Event_IsPowerupActive( int powerup );
- void Event_StartWarp();
- void Event_StopHelltime( int mode );
-
- #endif
- };
- ID_INLINE bool idPlayer::IsReady( void ) {
- return ready || forcedReady;
- }
- ID_INLINE bool idPlayer::IsRespawning( void ) {
- return respawning;
- }
- ID_INLINE idPhysics* idPlayer::GetPlayerPhysics( void ) {
- return &physicsObj;
- }
- ID_INLINE bool idPlayer::IsInTeleport( void ) {
- return ( teleportEntity.GetEntity() != NULL );
- }
- ID_INLINE void idPlayer::SetLeader( bool lead ) {
- leader = lead;
- }
- ID_INLINE bool idPlayer::IsLeader( void ) {
- return leader;
- }
- ID_INLINE bool idPlayer::SelfSmooth( void ) {
- return selfSmooth;
- }
- ID_INLINE void idPlayer::SetSelfSmooth( bool b ) {
- selfSmooth = b;
- }
- #endif /* !__GAME_PLAYER_H__ */
|