diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/server/hl2/hl2_player.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/server/hl2/hl2_player.h')
| -rw-r--r-- | mp/src/game/server/hl2/hl2_player.h | 768 |
1 files changed, 384 insertions, 384 deletions
diff --git a/mp/src/game/server/hl2/hl2_player.h b/mp/src/game/server/hl2/hl2_player.h index 18553824..6e72bb9e 100644 --- a/mp/src/game/server/hl2/hl2_player.h +++ b/mp/src/game/server/hl2/hl2_player.h @@ -1,384 +1,384 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: Player for HL2.
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef HL2_PLAYER_H
-#define HL2_PLAYER_H
-#pragma once
-
-
-#include "player.h"
-#include "hl2_playerlocaldata.h"
-#include "simtimer.h"
-#include "soundenvelope.h"
-
-class CAI_Squad;
-class CPropCombineBall;
-
-extern int TrainSpeed(int iSpeed, int iMax);
-extern void CopyToBodyQue( CBaseAnimating *pCorpse );
-
-#define ARMOR_DECAY_TIME 3.5f
-
-enum HL2PlayerPhysFlag_e
-{
- // 1 -- 5 are used by enum PlayerPhysFlag_e in player.h
-
- PFLAG_ONBARNACLE = ( 1<<6 ) // player is hangning from the barnalce
-};
-
-class IPhysicsPlayerController;
-class CLogicPlayerProxy;
-
-struct commandgoal_t
-{
- Vector m_vecGoalLocation;
- CBaseEntity *m_pGoalEntity;
-};
-
-// Time between checks to determine whether NPCs are illuminated by the flashlight
-#define FLASHLIGHT_NPC_CHECK_INTERVAL 0.4
-
-//----------------------------------------------------
-// Definitions for weapon slots
-//----------------------------------------------------
-#define WEAPON_MELEE_SLOT 0
-#define WEAPON_SECONDARY_SLOT 1
-#define WEAPON_PRIMARY_SLOT 2
-#define WEAPON_EXPLOSIVE_SLOT 3
-#define WEAPON_TOOL_SLOT 4
-
-//=============================================================================
-//=============================================================================
-class CSuitPowerDevice
-{
-public:
- CSuitPowerDevice( int bitsID, float flDrainRate ) { m_bitsDeviceID = bitsID; m_flDrainRate = flDrainRate; }
-private:
- int m_bitsDeviceID; // tells what the device is. DEVICE_SPRINT, DEVICE_FLASHLIGHT, etc. BITMASK!!!!!
- float m_flDrainRate; // how quickly does this device deplete suit power? ( percent per second )
-
-public:
- int GetDeviceID( void ) const { return m_bitsDeviceID; }
- float GetDeviceDrainRate( void ) const
- {
- if( g_pGameRules->GetSkillLevel() == SKILL_EASY && hl2_episodic.GetBool() && !(GetDeviceID()&bits_SUIT_DEVICE_SPRINT) )
- return m_flDrainRate * 0.5f;
- else
- return m_flDrainRate;
- }
-};
-
-//=============================================================================
-// >> HL2_PLAYER
-//=============================================================================
-class CHL2_Player : public CBasePlayer
-{
-public:
- DECLARE_CLASS( CHL2_Player, CBasePlayer );
-
- CHL2_Player();
- ~CHL2_Player( void );
-
- static CHL2_Player *CreatePlayer( const char *className, edict_t *ed )
- {
- CHL2_Player::s_PlayerEdict = ed;
- return (CHL2_Player*)CreateEntityByName( className );
- }
-
- DECLARE_SERVERCLASS();
- DECLARE_DATADESC();
-
- virtual void CreateCorpse( void ) { CopyToBodyQue( this ); };
-
- virtual void Precache( void );
- virtual void Spawn(void);
- virtual void Activate( void );
- virtual void CheatImpulseCommands( int iImpulse );
- virtual void PlayerRunCommand( CUserCmd *ucmd, IMoveHelper *moveHelper);
- virtual void PlayerUse ( void );
- virtual void SuspendUse( float flDuration ) { m_flTimeUseSuspended = gpGlobals->curtime + flDuration; }
- virtual void UpdateClientData( void );
- virtual void OnRestore();
- virtual void StopLoopingSounds( void );
- virtual void Splash( void );
- virtual void ModifyOrAppendPlayerCriteria( AI_CriteriaSet& set );
-
- void DrawDebugGeometryOverlays(void);
-
- virtual Vector EyeDirection2D( void );
- virtual Vector EyeDirection3D( void );
-
- virtual void CommanderMode();
-
- virtual bool ClientCommand( const CCommand &args );
-
- // from cbasecombatcharacter
- void InitVCollision( const Vector &vecAbsOrigin, const Vector &vecAbsVelocity );
- WeaponProficiency_t CalcWeaponProficiency( CBaseCombatWeapon *pWeapon );
-
- Class_T Classify ( void );
-
- // from CBasePlayer
- virtual void SetupVisibility( CBaseEntity *pViewEntity, unsigned char *pvs, int pvssize );
-
- // Suit Power Interface
- void SuitPower_Update( void );
- bool SuitPower_Drain( float flPower ); // consume some of the suit's power.
- void SuitPower_Charge( float flPower ); // add suit power.
- void SuitPower_SetCharge( float flPower ) { m_HL2Local.m_flSuitPower = flPower; }
- void SuitPower_Initialize( void );
- bool SuitPower_IsDeviceActive( const CSuitPowerDevice &device );
- bool SuitPower_AddDevice( const CSuitPowerDevice &device );
- bool SuitPower_RemoveDevice( const CSuitPowerDevice &device );
- bool SuitPower_ShouldRecharge( void );
- float SuitPower_GetCurrentPercentage( void ) { return m_HL2Local.m_flSuitPower; }
-
- void SetFlashlightEnabled( bool bState );
-
- // Apply a battery
- bool ApplyBattery( float powerMultiplier = 1.0 );
-
- // Commander Mode for controller NPCs
- enum CommanderCommand_t
- {
- CC_NONE,
- CC_TOGGLE,
- CC_FOLLOW,
- CC_SEND,
- };
-
- void CommanderUpdate();
- void CommanderExecute( CommanderCommand_t command = CC_TOGGLE );
- bool CommanderFindGoal( commandgoal_t *pGoal );
- void NotifyFriendsOfDamage( CBaseEntity *pAttackerEntity );
- CAI_BaseNPC *GetSquadCommandRepresentative();
- int GetNumSquadCommandables();
- int GetNumSquadCommandableMedics();
-
- // Locator
- void UpdateLocatorPosition( const Vector &vecPosition );
-
- // Sprint Device
- void StartAutoSprint( void );
- void StartSprinting( void );
- void StopSprinting( void );
- void InitSprinting( void );
- bool IsSprinting( void ) { return m_fIsSprinting; }
- bool CanSprint( void );
- void EnableSprint( bool bEnable);
-
- bool CanZoom( CBaseEntity *pRequester );
- void ToggleZoom(void);
- void StartZooming( void );
- void StopZooming( void );
- bool IsZooming( void );
- void CheckSuitZoom( void );
-
- // Walking
- void StartWalking( void );
- void StopWalking( void );
- bool IsWalking( void ) { return m_fIsWalking; }
-
- // Aiming heuristics accessors
- virtual float GetIdleTime( void ) const { return ( m_flIdleTime - m_flMoveTime ); }
- virtual float GetMoveTime( void ) const { return ( m_flMoveTime - m_flIdleTime ); }
- virtual float GetLastDamageTime( void ) const { return m_flLastDamageTime; }
- virtual bool IsDucking( void ) const { return !!( GetFlags() & FL_DUCKING ); }
-
- virtual bool PassesDamageFilter( const CTakeDamageInfo &info );
- void InputIgnoreFallDamage( inputdata_t &inputdata );
- void InputIgnoreFallDamageWithoutReset( inputdata_t &inputdata );
- void InputEnableFlashlight( inputdata_t &inputdata );
- void InputDisableFlashlight( inputdata_t &inputdata );
-
- const impactdamagetable_t &GetPhysicsImpactDamageTable();
- virtual int OnTakeDamage( const CTakeDamageInfo &info );
- virtual int OnTakeDamage_Alive( const CTakeDamageInfo &info );
- virtual void OnDamagedByExplosion( const CTakeDamageInfo &info );
- bool ShouldShootMissTarget( CBaseCombatCharacter *pAttacker );
-
- void CombineBallSocketed( CPropCombineBall *pCombineBall );
-
- virtual void Event_KilledOther( CBaseEntity *pVictim, const CTakeDamageInfo &info );
-
- virtual void GetAutoaimVector( autoaim_params_t ¶ms );
- bool ShouldKeepLockedAutoaimTarget( EHANDLE hLockedTarget );
-
- void SetLocatorTargetEntity( CBaseEntity *pEntity ) { m_hLocatorTargetEntity.Set( pEntity ); }
-
- virtual int GiveAmmo( int nCount, int nAmmoIndex, bool bSuppressSound);
- virtual bool BumpWeapon( CBaseCombatWeapon *pWeapon );
-
- virtual bool Weapon_CanUse( CBaseCombatWeapon *pWeapon );
- virtual void Weapon_Equip( CBaseCombatWeapon *pWeapon );
- virtual bool Weapon_Lower( void );
- virtual bool Weapon_Ready( void );
- virtual bool Weapon_Switch( CBaseCombatWeapon *pWeapon, int viewmodelindex = 0 );
- virtual bool Weapon_CanSwitchTo( CBaseCombatWeapon *pWeapon );
-
- void FirePlayerProxyOutput( const char *pszOutputName, variant_t variant, CBaseEntity *pActivator, CBaseEntity *pCaller );
-
- CLogicPlayerProxy *GetPlayerProxy( void );
-
- // Flashlight Device
- void CheckFlashlight( void );
- int FlashlightIsOn( void );
- void FlashlightTurnOn( void );
- void FlashlightTurnOff( void );
- bool IsIlluminatedByFlashlight( CBaseEntity *pEntity, float *flReturnDot );
- void SetFlashlightPowerDrainScale( float flScale ) { m_flFlashlightPowerDrainScale = flScale; }
-
- // Underwater breather device
- virtual void SetPlayerUnderwater( bool state );
- virtual bool CanBreatheUnderwater() const { return m_HL2Local.m_flSuitPower > 0.0f; }
-
- // physics interactions
- virtual void PickupObject( CBaseEntity *pObject, bool bLimitMassAndSize );
- virtual bool IsHoldingEntity( CBaseEntity *pEnt );
- virtual void ForceDropOfCarriedPhysObjects( CBaseEntity *pOnlyIfHoldindThis );
- virtual float GetHeldObjectMass( IPhysicsObject *pHeldObject );
-
- virtual bool IsFollowingPhysics( void ) { return (m_afPhysicsFlags & PFLAG_ONBARNACLE) > 0; }
- void InputForceDropPhysObjects( inputdata_t &data );
-
- virtual void Event_Killed( const CTakeDamageInfo &info );
- void NotifyScriptsOfDeath( void );
-
- // override the test for getting hit
- virtual bool TestHitboxes( const Ray_t &ray, unsigned int fContentsMask, trace_t& tr );
-
- LadderMove_t *GetLadderMove() { return &m_HL2Local.m_LadderMove; }
- virtual void ExitLadder();
- virtual surfacedata_t *GetLadderSurface( const Vector &origin );
-
- virtual void EquipSuit( bool bPlayEffects = true );
- virtual void RemoveSuit( void );
- void HandleAdmireGlovesAnimation( void );
- void StartAdmireGlovesAnimation( void );
-
- void HandleSpeedChanges( void );
-
- void SetControlClass( Class_T controlClass ) { m_nControlClass = controlClass; }
-
- void StartWaterDeathSounds( void );
- void StopWaterDeathSounds( void );
-
- bool IsWeaponLowered( void ) { return m_HL2Local.m_bWeaponLowered; }
- void HandleArmorReduction( void );
- void StartArmorReduction( void ) { m_flArmorReductionTime = gpGlobals->curtime + ARMOR_DECAY_TIME;
- m_iArmorReductionFrom = ArmorValue();
- }
-
- void MissedAR2AltFire();
-
- inline void EnableCappedPhysicsDamage();
- inline void DisableCappedPhysicsDamage();
-
- // HUD HINTS
- void DisplayLadderHudHint();
-
- CSoundPatch *m_sndLeeches;
- CSoundPatch *m_sndWaterSplashes;
-
-protected:
- virtual void PreThink( void );
- virtual void PostThink( void );
- virtual bool HandleInteraction(int interactionType, void *data, CBaseCombatCharacter* sourceEnt);
-
- virtual void UpdateWeaponPosture( void );
-
- virtual void ItemPostFrame();
- virtual void PlayUseDenySound();
-
-private:
- bool CommanderExecuteOne( CAI_BaseNPC *pNpc, const commandgoal_t &goal, CAI_BaseNPC **Allies, int numAllies );
-
- void OnSquadMemberKilled( inputdata_t &data );
-
- Class_T m_nControlClass; // Class when player is controlling another entity
- // This player's HL2 specific data that should only be replicated to
- // the player and not to other players.
- CNetworkVarEmbedded( CHL2PlayerLocalData, m_HL2Local );
-
- float m_flTimeAllSuitDevicesOff;
-
- bool m_bSprintEnabled; // Used to disable sprint temporarily
- bool m_bIsAutoSprinting; // A proxy for holding down the sprint key.
- float m_fAutoSprintMinTime; // Minimum time to maintain autosprint regardless of player speed.
-
- CNetworkVar( bool, m_fIsSprinting );
- CNetworkVarForDerived( bool, m_fIsWalking );
-
-protected: // Jeep: Portal_Player needs access to this variable to overload PlayerUse for picking up objects through portals
- bool m_bPlayUseDenySound; // Signaled by PlayerUse, but can be unset by HL2 ladder code...
-
-private:
-
- CAI_Squad * m_pPlayerAISquad;
- CSimpleSimTimer m_CommanderUpdateTimer;
- float m_RealTimeLastSquadCommand;
- CommanderCommand_t m_QueuedCommand;
-
- Vector m_vecMissPositions[16];
- int m_nNumMissPositions;
-
- float m_flTimeIgnoreFallDamage;
- bool m_bIgnoreFallDamageResetAfterImpact;
-
- // Suit power fields
- float m_flSuitPowerLoad; // net suit power drain (total of all device's drainrates)
- float m_flAdmireGlovesAnimTime;
-
- float m_flNextFlashlightCheckTime;
- float m_flFlashlightPowerDrainScale;
-
- // Aiming heuristics code
- float m_flIdleTime; //Amount of time we've been motionless
- float m_flMoveTime; //Amount of time we've been in motion
- float m_flLastDamageTime; //Last time we took damage
- float m_flTargetFindTime;
-
- EHANDLE m_hPlayerProxy;
-
- bool m_bFlashlightDisabled;
- bool m_bUseCappedPhysicsDamageTable;
-
- float m_flArmorReductionTime;
- int m_iArmorReductionFrom;
-
- float m_flTimeUseSuspended;
-
- CSimpleSimTimer m_LowerWeaponTimer;
- CSimpleSimTimer m_AutoaimTimer;
-
- EHANDLE m_hLockedAutoAimEntity;
-
- EHANDLE m_hLocatorTargetEntity; // The entity that's being tracked by the suit locator.
-
- float m_flTimeNextLadderHint; // Next time we're eligible to display a HUD hint about a ladder.
-
- friend class CHL2GameMovement;
-};
-
-
-//-----------------------------------------------------------------------------
-// FIXME: find a better way to do this
-// Switches us to a physics damage table that caps the max damage.
-//-----------------------------------------------------------------------------
-void CHL2_Player::EnableCappedPhysicsDamage()
-{
- m_bUseCappedPhysicsDamageTable = true;
-}
-
-
-void CHL2_Player::DisableCappedPhysicsDamage()
-{
- m_bUseCappedPhysicsDamageTable = false;
-}
-
-
-#endif //HL2_PLAYER_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Player for HL2. +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef HL2_PLAYER_H +#define HL2_PLAYER_H +#pragma once + + +#include "player.h" +#include "hl2_playerlocaldata.h" +#include "simtimer.h" +#include "soundenvelope.h" + +class CAI_Squad; +class CPropCombineBall; + +extern int TrainSpeed(int iSpeed, int iMax); +extern void CopyToBodyQue( CBaseAnimating *pCorpse ); + +#define ARMOR_DECAY_TIME 3.5f + +enum HL2PlayerPhysFlag_e +{ + // 1 -- 5 are used by enum PlayerPhysFlag_e in player.h + + PFLAG_ONBARNACLE = ( 1<<6 ) // player is hangning from the barnalce +}; + +class IPhysicsPlayerController; +class CLogicPlayerProxy; + +struct commandgoal_t +{ + Vector m_vecGoalLocation; + CBaseEntity *m_pGoalEntity; +}; + +// Time between checks to determine whether NPCs are illuminated by the flashlight +#define FLASHLIGHT_NPC_CHECK_INTERVAL 0.4 + +//---------------------------------------------------- +// Definitions for weapon slots +//---------------------------------------------------- +#define WEAPON_MELEE_SLOT 0 +#define WEAPON_SECONDARY_SLOT 1 +#define WEAPON_PRIMARY_SLOT 2 +#define WEAPON_EXPLOSIVE_SLOT 3 +#define WEAPON_TOOL_SLOT 4 + +//============================================================================= +//============================================================================= +class CSuitPowerDevice +{ +public: + CSuitPowerDevice( int bitsID, float flDrainRate ) { m_bitsDeviceID = bitsID; m_flDrainRate = flDrainRate; } +private: + int m_bitsDeviceID; // tells what the device is. DEVICE_SPRINT, DEVICE_FLASHLIGHT, etc. BITMASK!!!!! + float m_flDrainRate; // how quickly does this device deplete suit power? ( percent per second ) + +public: + int GetDeviceID( void ) const { return m_bitsDeviceID; } + float GetDeviceDrainRate( void ) const + { + if( g_pGameRules->GetSkillLevel() == SKILL_EASY && hl2_episodic.GetBool() && !(GetDeviceID()&bits_SUIT_DEVICE_SPRINT) ) + return m_flDrainRate * 0.5f; + else + return m_flDrainRate; + } +}; + +//============================================================================= +// >> HL2_PLAYER +//============================================================================= +class CHL2_Player : public CBasePlayer +{ +public: + DECLARE_CLASS( CHL2_Player, CBasePlayer ); + + CHL2_Player(); + ~CHL2_Player( void ); + + static CHL2_Player *CreatePlayer( const char *className, edict_t *ed ) + { + CHL2_Player::s_PlayerEdict = ed; + return (CHL2_Player*)CreateEntityByName( className ); + } + + DECLARE_SERVERCLASS(); + DECLARE_DATADESC(); + + virtual void CreateCorpse( void ) { CopyToBodyQue( this ); }; + + virtual void Precache( void ); + virtual void Spawn(void); + virtual void Activate( void ); + virtual void CheatImpulseCommands( int iImpulse ); + virtual void PlayerRunCommand( CUserCmd *ucmd, IMoveHelper *moveHelper); + virtual void PlayerUse ( void ); + virtual void SuspendUse( float flDuration ) { m_flTimeUseSuspended = gpGlobals->curtime + flDuration; } + virtual void UpdateClientData( void ); + virtual void OnRestore(); + virtual void StopLoopingSounds( void ); + virtual void Splash( void ); + virtual void ModifyOrAppendPlayerCriteria( AI_CriteriaSet& set ); + + void DrawDebugGeometryOverlays(void); + + virtual Vector EyeDirection2D( void ); + virtual Vector EyeDirection3D( void ); + + virtual void CommanderMode(); + + virtual bool ClientCommand( const CCommand &args ); + + // from cbasecombatcharacter + void InitVCollision( const Vector &vecAbsOrigin, const Vector &vecAbsVelocity ); + WeaponProficiency_t CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ); + + Class_T Classify ( void ); + + // from CBasePlayer + virtual void SetupVisibility( CBaseEntity *pViewEntity, unsigned char *pvs, int pvssize ); + + // Suit Power Interface + void SuitPower_Update( void ); + bool SuitPower_Drain( float flPower ); // consume some of the suit's power. + void SuitPower_Charge( float flPower ); // add suit power. + void SuitPower_SetCharge( float flPower ) { m_HL2Local.m_flSuitPower = flPower; } + void SuitPower_Initialize( void ); + bool SuitPower_IsDeviceActive( const CSuitPowerDevice &device ); + bool SuitPower_AddDevice( const CSuitPowerDevice &device ); + bool SuitPower_RemoveDevice( const CSuitPowerDevice &device ); + bool SuitPower_ShouldRecharge( void ); + float SuitPower_GetCurrentPercentage( void ) { return m_HL2Local.m_flSuitPower; } + + void SetFlashlightEnabled( bool bState ); + + // Apply a battery + bool ApplyBattery( float powerMultiplier = 1.0 ); + + // Commander Mode for controller NPCs + enum CommanderCommand_t + { + CC_NONE, + CC_TOGGLE, + CC_FOLLOW, + CC_SEND, + }; + + void CommanderUpdate(); + void CommanderExecute( CommanderCommand_t command = CC_TOGGLE ); + bool CommanderFindGoal( commandgoal_t *pGoal ); + void NotifyFriendsOfDamage( CBaseEntity *pAttackerEntity ); + CAI_BaseNPC *GetSquadCommandRepresentative(); + int GetNumSquadCommandables(); + int GetNumSquadCommandableMedics(); + + // Locator + void UpdateLocatorPosition( const Vector &vecPosition ); + + // Sprint Device + void StartAutoSprint( void ); + void StartSprinting( void ); + void StopSprinting( void ); + void InitSprinting( void ); + bool IsSprinting( void ) { return m_fIsSprinting; } + bool CanSprint( void ); + void EnableSprint( bool bEnable); + + bool CanZoom( CBaseEntity *pRequester ); + void ToggleZoom(void); + void StartZooming( void ); + void StopZooming( void ); + bool IsZooming( void ); + void CheckSuitZoom( void ); + + // Walking + void StartWalking( void ); + void StopWalking( void ); + bool IsWalking( void ) { return m_fIsWalking; } + + // Aiming heuristics accessors + virtual float GetIdleTime( void ) const { return ( m_flIdleTime - m_flMoveTime ); } + virtual float GetMoveTime( void ) const { return ( m_flMoveTime - m_flIdleTime ); } + virtual float GetLastDamageTime( void ) const { return m_flLastDamageTime; } + virtual bool IsDucking( void ) const { return !!( GetFlags() & FL_DUCKING ); } + + virtual bool PassesDamageFilter( const CTakeDamageInfo &info ); + void InputIgnoreFallDamage( inputdata_t &inputdata ); + void InputIgnoreFallDamageWithoutReset( inputdata_t &inputdata ); + void InputEnableFlashlight( inputdata_t &inputdata ); + void InputDisableFlashlight( inputdata_t &inputdata ); + + const impactdamagetable_t &GetPhysicsImpactDamageTable(); + virtual int OnTakeDamage( const CTakeDamageInfo &info ); + virtual int OnTakeDamage_Alive( const CTakeDamageInfo &info ); + virtual void OnDamagedByExplosion( const CTakeDamageInfo &info ); + bool ShouldShootMissTarget( CBaseCombatCharacter *pAttacker ); + + void CombineBallSocketed( CPropCombineBall *pCombineBall ); + + virtual void Event_KilledOther( CBaseEntity *pVictim, const CTakeDamageInfo &info ); + + virtual void GetAutoaimVector( autoaim_params_t ¶ms ); + bool ShouldKeepLockedAutoaimTarget( EHANDLE hLockedTarget ); + + void SetLocatorTargetEntity( CBaseEntity *pEntity ) { m_hLocatorTargetEntity.Set( pEntity ); } + + virtual int GiveAmmo( int nCount, int nAmmoIndex, bool bSuppressSound); + virtual bool BumpWeapon( CBaseCombatWeapon *pWeapon ); + + virtual bool Weapon_CanUse( CBaseCombatWeapon *pWeapon ); + virtual void Weapon_Equip( CBaseCombatWeapon *pWeapon ); + virtual bool Weapon_Lower( void ); + virtual bool Weapon_Ready( void ); + virtual bool Weapon_Switch( CBaseCombatWeapon *pWeapon, int viewmodelindex = 0 ); + virtual bool Weapon_CanSwitchTo( CBaseCombatWeapon *pWeapon ); + + void FirePlayerProxyOutput( const char *pszOutputName, variant_t variant, CBaseEntity *pActivator, CBaseEntity *pCaller ); + + CLogicPlayerProxy *GetPlayerProxy( void ); + + // Flashlight Device + void CheckFlashlight( void ); + int FlashlightIsOn( void ); + void FlashlightTurnOn( void ); + void FlashlightTurnOff( void ); + bool IsIlluminatedByFlashlight( CBaseEntity *pEntity, float *flReturnDot ); + void SetFlashlightPowerDrainScale( float flScale ) { m_flFlashlightPowerDrainScale = flScale; } + + // Underwater breather device + virtual void SetPlayerUnderwater( bool state ); + virtual bool CanBreatheUnderwater() const { return m_HL2Local.m_flSuitPower > 0.0f; } + + // physics interactions + virtual void PickupObject( CBaseEntity *pObject, bool bLimitMassAndSize ); + virtual bool IsHoldingEntity( CBaseEntity *pEnt ); + virtual void ForceDropOfCarriedPhysObjects( CBaseEntity *pOnlyIfHoldindThis ); + virtual float GetHeldObjectMass( IPhysicsObject *pHeldObject ); + + virtual bool IsFollowingPhysics( void ) { return (m_afPhysicsFlags & PFLAG_ONBARNACLE) > 0; } + void InputForceDropPhysObjects( inputdata_t &data ); + + virtual void Event_Killed( const CTakeDamageInfo &info ); + void NotifyScriptsOfDeath( void ); + + // override the test for getting hit + virtual bool TestHitboxes( const Ray_t &ray, unsigned int fContentsMask, trace_t& tr ); + + LadderMove_t *GetLadderMove() { return &m_HL2Local.m_LadderMove; } + virtual void ExitLadder(); + virtual surfacedata_t *GetLadderSurface( const Vector &origin ); + + virtual void EquipSuit( bool bPlayEffects = true ); + virtual void RemoveSuit( void ); + void HandleAdmireGlovesAnimation( void ); + void StartAdmireGlovesAnimation( void ); + + void HandleSpeedChanges( void ); + + void SetControlClass( Class_T controlClass ) { m_nControlClass = controlClass; } + + void StartWaterDeathSounds( void ); + void StopWaterDeathSounds( void ); + + bool IsWeaponLowered( void ) { return m_HL2Local.m_bWeaponLowered; } + void HandleArmorReduction( void ); + void StartArmorReduction( void ) { m_flArmorReductionTime = gpGlobals->curtime + ARMOR_DECAY_TIME; + m_iArmorReductionFrom = ArmorValue(); + } + + void MissedAR2AltFire(); + + inline void EnableCappedPhysicsDamage(); + inline void DisableCappedPhysicsDamage(); + + // HUD HINTS + void DisplayLadderHudHint(); + + CSoundPatch *m_sndLeeches; + CSoundPatch *m_sndWaterSplashes; + +protected: + virtual void PreThink( void ); + virtual void PostThink( void ); + virtual bool HandleInteraction(int interactionType, void *data, CBaseCombatCharacter* sourceEnt); + + virtual void UpdateWeaponPosture( void ); + + virtual void ItemPostFrame(); + virtual void PlayUseDenySound(); + +private: + bool CommanderExecuteOne( CAI_BaseNPC *pNpc, const commandgoal_t &goal, CAI_BaseNPC **Allies, int numAllies ); + + void OnSquadMemberKilled( inputdata_t &data ); + + Class_T m_nControlClass; // Class when player is controlling another entity + // This player's HL2 specific data that should only be replicated to + // the player and not to other players. + CNetworkVarEmbedded( CHL2PlayerLocalData, m_HL2Local ); + + float m_flTimeAllSuitDevicesOff; + + bool m_bSprintEnabled; // Used to disable sprint temporarily + bool m_bIsAutoSprinting; // A proxy for holding down the sprint key. + float m_fAutoSprintMinTime; // Minimum time to maintain autosprint regardless of player speed. + + CNetworkVar( bool, m_fIsSprinting ); + CNetworkVarForDerived( bool, m_fIsWalking ); + +protected: // Jeep: Portal_Player needs access to this variable to overload PlayerUse for picking up objects through portals + bool m_bPlayUseDenySound; // Signaled by PlayerUse, but can be unset by HL2 ladder code... + +private: + + CAI_Squad * m_pPlayerAISquad; + CSimpleSimTimer m_CommanderUpdateTimer; + float m_RealTimeLastSquadCommand; + CommanderCommand_t m_QueuedCommand; + + Vector m_vecMissPositions[16]; + int m_nNumMissPositions; + + float m_flTimeIgnoreFallDamage; + bool m_bIgnoreFallDamageResetAfterImpact; + + // Suit power fields + float m_flSuitPowerLoad; // net suit power drain (total of all device's drainrates) + float m_flAdmireGlovesAnimTime; + + float m_flNextFlashlightCheckTime; + float m_flFlashlightPowerDrainScale; + + // Aiming heuristics code + float m_flIdleTime; //Amount of time we've been motionless + float m_flMoveTime; //Amount of time we've been in motion + float m_flLastDamageTime; //Last time we took damage + float m_flTargetFindTime; + + EHANDLE m_hPlayerProxy; + + bool m_bFlashlightDisabled; + bool m_bUseCappedPhysicsDamageTable; + + float m_flArmorReductionTime; + int m_iArmorReductionFrom; + + float m_flTimeUseSuspended; + + CSimpleSimTimer m_LowerWeaponTimer; + CSimpleSimTimer m_AutoaimTimer; + + EHANDLE m_hLockedAutoAimEntity; + + EHANDLE m_hLocatorTargetEntity; // The entity that's being tracked by the suit locator. + + float m_flTimeNextLadderHint; // Next time we're eligible to display a HUD hint about a ladder. + + friend class CHL2GameMovement; +}; + + +//----------------------------------------------------------------------------- +// FIXME: find a better way to do this +// Switches us to a physics damage table that caps the max damage. +//----------------------------------------------------------------------------- +void CHL2_Player::EnableCappedPhysicsDamage() +{ + m_bUseCappedPhysicsDamageTable = true; +} + + +void CHL2_Player::DisableCappedPhysicsDamage() +{ + m_bUseCappedPhysicsDamageTable = false; +} + + +#endif //HL2_PLAYER_H |