diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/cstrike/c_cs_player.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/cstrike/c_cs_player.h')
| -rw-r--r-- | game/client/cstrike/c_cs_player.h | 419 |
1 files changed, 419 insertions, 0 deletions
diff --git a/game/client/cstrike/c_cs_player.h b/game/client/cstrike/c_cs_player.h new file mode 100644 index 0000000..0d50a20 --- /dev/null +++ b/game/client/cstrike/c_cs_player.h @@ -0,0 +1,419 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef C_CS_PLAYER_H +#define C_CS_PLAYER_H +#ifdef _WIN32 +#pragma once +#endif + + +#include "cs_playeranimstate.h" +#include "c_baseplayer.h" +#include "cs_shareddefs.h" +#include "weapon_csbase.h" +#include "baseparticleentity.h" +#include "beamdraw.h" + + +class C_PhysicsProp; + +extern ConVar cl_disablefreezecam; + +class CAddonModel +{ +public: + CHandle<C_BaseAnimating> m_hEnt; // The model for the addon. + int m_iAddon; // One of the ADDON_ bits telling which model this is. + int m_iAttachmentPoint; // Which attachment point on the player model this guy is on. +}; + + + +class C_CSPlayer : public C_BasePlayer, public ICSPlayerAnimStateHelpers +{ +public: + DECLARE_CLASS( C_CSPlayer, C_BasePlayer ); + DECLARE_CLIENTCLASS(); + DECLARE_PREDICTABLE(); + DECLARE_INTERPOLATION(); + + C_CSPlayer(); + ~C_CSPlayer(); + + virtual void Simulate(); + + bool HasDefuser() const; + + void GiveDefuser(); + void RemoveDefuser(); + + bool HasNightVision() const; + + static C_CSPlayer* GetLocalCSPlayer(); + CSPlayerState State_Get() const; + + virtual float GetMinFOV() const; + + // Get how much $$$ this guy has. + int GetAccount() const; + + // Returns one of the CS_CLASS_ enums. + int PlayerClass() const; + + bool IsInBuyZone(); + bool CanShowTeamMenu() const; // Returns true if we're allowed to show the team menu right now. + + // Get the amount of armor the player has. + int ArmorValue() const; + bool HasHelmet() const; + int GetCurrentAssaultSuitPrice(); + + virtual const QAngle& EyeAngles(); + virtual const QAngle& GetRenderAngles(); + virtual void CalcObserverView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov ); + + virtual void GetRenderBounds( Vector& theMins, Vector& theMaxs ); + virtual void GetShadowRenderBounds( Vector &mins, Vector &maxs, ShadowType_t shadowType ); + virtual bool GetShadowCastDirection( Vector *pDirection, ShadowType_t shadowType ) const; + + virtual void VPhysicsUpdate( IPhysicsObject *pPhysics ); + + // Get the ID target entity index. The ID target is the player that is behind our crosshairs, used to + // display the player's name. + int GetIDTarget() const; + + virtual void NotifyShouldTransmit( ShouldTransmitState_t state ); + virtual void ClientThink(); + + virtual void OnDataChanged( DataUpdateType_t type ); + virtual void PostDataUpdate( DataUpdateType_t updateType ); + virtual bool Interpolate( float currentTime ); + virtual void UpdateStepSound( surfacedata_t *psurface, const Vector &vecOrigin, const Vector &vecVelocity ); + virtual surfacedata_t * GetFootstepSurface( const Vector &origin, const char *surfaceName ); + virtual void ValidateModelIndex( void ); + + virtual int GetMaxHealth() const; + + bool Weapon_CanSwitchTo(C_BaseCombatWeapon *pWeapon); + + virtual void UpdateClientSideAnimation(); + virtual void ProcessMuzzleFlashEvent(); + + virtual const Vector& GetRenderOrigin( void ); + + bool CreateMove( float flInputSampleTime, CUserCmd *pCmd ); + + CUtlVector< C_BaseParticleEntity* > m_SmokeGrenades; + + virtual bool ShouldDraw( void ); + virtual void BuildTransformations( CStudioHdr *pStudioHdr, Vector *pos, Quaternion q[], const matrix3x4_t& cameraTransform, int boneMask, CBoneBitList &boneComputed ); + + virtual C_BaseAnimating * BecomeRagdollOnClient(); + virtual IRagdoll* GetRepresentativeRagdoll() const; + + void ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName ); + + // Have this player play the sounds from his view model's reload animation. + void PlayReloadEffect(); + + virtual void FireEvent( const Vector& origin, const QAngle& angles, int event, const char *options ); + + bool HasC4( void ); + + virtual void CreateLightEffects( void ) {} //no dimlight effects + + // Sometimes the server wants to update the client's cycle to get the two to run in sync (for proper hit detection) + virtual void SetServerIntendedCycle( float intended ) { m_serverIntendedCycle = intended; } + virtual float GetServerIntendedCycle( void ) { return m_serverIntendedCycle; } + + virtual bool ShouldReceiveProjectedTextures( int flags ) + { + return ( this != C_BasePlayer::GetLocalPlayer() ); + } + + void ClearSoundEvents() + { + m_SoundEvents.RemoveAll(); + } + + //============================================================================= + // HPE_BEGIN: + // [menglish] Returns whether this player is dominating or is being dominated by the specified player + //============================================================================= + bool IsPlayerDominated( int iPlayerIndex ); + bool IsPlayerDominatingMe( int iPlayerIndex ); + + virtual void CalcFreezeCamView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov ); + + virtual float GetDeathCamInterpolationTime(); + //============================================================================= + // HPE_END + //============================================================================= + + +// Called by shared code. +public: + + // ICSPlayerAnimState overrides. + virtual CWeaponCSBase* CSAnim_GetActiveWeapon(); + virtual bool CSAnim_CanMove(); + + + void DoAnimationEvent( PlayerAnimEvent_t event, int nData = 0 ); + + +// Implemented in shared code. +public: + virtual float GetPlayerMaxSpeed(); + + void GetBulletTypeParameters( + int iBulletType, + float &fPenetrationPower, + float &flPenetrationDistance ); + + void FireBullet( + Vector vecSrc, + const QAngle &shootAngles, + float flDistance, + int iPenetration, + int iBulletType, + int iDamage, + float flRangeModifier, + CBaseEntity *pevAttacker, + bool bDoEffects, + float xSpread, float ySpread ); + + void KickBack( + float up_base, + float lateral_base, + float up_modifier, + float lateral_modifier, + float up_max, + float lateral_max, + int direction_change ); + + // Returns true if the player is allowed to move. + bool CanMove() const; + + void OnJump( float fImpulse ); + void OnLand( float fVelocity ); + + bool HasC4() const; // Is this player carrying a C4 bomb? + bool IsVIP() const; // Is this player the VIP? + + virtual void SetAnimation( PLAYER_ANIM playerAnim ); + + +public: + + void UpdateIDTarget( void ); + void RemoveAddonModels( void ); + void UpdateMinModels( void ); + + void SetActivity( Activity eActivity ); + Activity GetActivity( void ) const; + + ICSPlayerAnimState *GetPlayerAnimState() { return m_PlayerAnimState; } + +public: + + ICSPlayerAnimState *m_PlayerAnimState; + + // Used to control animation state. + Activity m_Activity; + + // Predicted variables. + CNetworkVar( bool, m_bResumeZoom ); + CNetworkVar( int , m_iLastZoom ); // after firing a shot, set the FOV to 90, and after showing the animation, bring the FOV back to last zoom level. + CNetworkVar( CSPlayerState, m_iPlayerState ); // SupraFiend: this gives the current state in the joining process, the states are listed above + CNetworkVar( bool, m_bIsDefusing ); // tracks whether this player is currently defusing a bomb + CNetworkVar( bool, m_bInBombZone ); + CNetworkVar( bool, m_bInBuyZone ); + CNetworkVar( int, m_iThrowGrenadeCounter ); // used to trigger grenade throw animations. + + bool IsInHostageRescueZone( void ); + + // This is a combination of the ADDON_ flags in cs_shareddefs.h. + CNetworkVar( int, m_iAddonBits ); + + // Clients don't know about holstered weapons, so we need to be told about them here + CNetworkVar( int, m_iPrimaryAddon ); + CNetworkVar( int, m_iSecondaryAddon ); + + // How long the progress bar takes to get to the end. If this is 0, then the progress bar + // should not be drawn. + CNetworkVar( int, m_iProgressBarDuration ); + + // When the progress bar should start. + CNetworkVar( float, m_flProgressBarStartTime ); + + CNetworkVar( float, m_flStamina ); + CNetworkVar( int, m_iDirection ); // The current lateral kicking direction; 1 = right, 0 = left + CNetworkVar( int, m_iShotsFired ); // number of shots fired recently + CNetworkVar( bool, m_bNightVisionOn ); + CNetworkVar( bool, m_bHasNightVision ); + + //============================================================================= + // HPE_BEGIN: + // [dwenger] Added for fun-fact support + //============================================================================= + + //CNetworkVar( bool, m_bPickedUpDefuser ); + //CNetworkVar( bool, m_bDefusedWithPickedUpKit ); + + //============================================================================= + // HPE_END + //============================================================================= + + CNetworkVar( float, m_flVelocityModifier ); + + bool m_bDetected; + + EHANDLE m_hRagdoll; + + CWeaponCSBase* GetActiveCSWeapon() const; + CWeaponCSBase* GetCSWeapon( CSWeaponID id ) const; + + virtual ShadowType_t ShadowCastType(); + +#ifdef CS_SHIELD_ENABLED + bool HasShield( void ) { return m_bHasShield; } + bool IsShieldDrawn( void ) { return m_bShieldDrawn; } + void SetShieldDrawnState( bool bState ) { m_bShieldDrawn = bState; } +#else + bool HasShield( void ) { return false; } + bool IsShieldDrawn( void ) { return false; } + void SetShieldDrawnState( bool bState ) {} +#endif + + float m_flNightVisionAlpha; + + float m_flFlashAlpha; + float m_flFlashBangTime; + CNetworkVar( float, m_flFlashMaxAlpha ); + CNetworkVar( float, m_flFlashDuration ); + + // Having the RecvProxy in the player allows us to keep the var private + static void RecvProxy_CycleLatch( const CRecvProxyData *pData, void *pStruct, void *pOut ); + + // Bots and hostages auto-duck during jumps + bool m_duckUntilOnGround; + + Vector m_lastStandingPos; // used by the gamemovement code for finding ladders + + void SurpressLadderChecks( const Vector& pos, const Vector& normal ); + bool CanGrabLadder( const Vector& pos, const Vector& normal ); + +//============================================================================= +// HPE_BEGIN: +//============================================================================= + +// [tj] checks if this player has another given player on their Steam friends list. + bool HasPlayerAsFriend(C_CSPlayer* player); + +private: + CountdownTimer m_ladderSurpressionTimer; + Vector m_lastLadderNormal; + Vector m_lastLadderPos; + + void UpdateRadar(); + void UpdateSoundEvents(); + + void CreateAddonModel( int i ); + void UpdateAddonModels(); + + void PushawayThink(); + + int m_iAccount; + bool m_bHasHelmet; + int m_iClass; + int m_ArmorValue; + QAngle m_angEyeAngles; + bool m_bHasDefuser; + bool m_bInHostageRescueZone; + float m_fNextThinkPushAway; + + bool m_bPlayingFreezeCamSound; + +#ifdef CS_SHIELD_ENABLED + bool m_bHasShield; + bool m_bShieldDrawn; +#endif + + Vector m_vecRagdollVelocity; + + CInterpolatedVar< QAngle > m_iv_angEyeAngles; + + // ID Target + int m_iIDEntIndex; + CountdownTimer m_delayTargetIDTimer; + + // Show the ID target after the cursor leaves the entity + int m_iOldIDEntIndex; + CountdownTimer m_holdTargetIDTimer; + + void ReleaseFlashlight( void ); + Beam_t *m_pFlashlightBeam; + + class CCSSoundEvent + { + public: + string_t m_SoundName; + float m_flEventTime; // Play the event when gpGlobals->curtime goes past this. + }; + CUtlLinkedList<CCSSoundEvent,int> m_SoundEvents; + + + // This is the list of addons hanging off the guy (grenades, C4, nightvision, etc). + CUtlLinkedList<CAddonModel, int> m_AddonModels; + int m_iLastAddonBits; + int m_iLastPrimaryAddon; + int m_iLastSecondaryAddon; + + int m_cycleLatch; // server periodically updates this to fix up our anims, here it is a 4 bit fixed point + float m_serverIntendedCycle; // server periodically updates this to fix up our anims, here it is the float we want, or -1 for no override + + + + //============================================================================= + // HPE_BEGIN: + // [tj] Network variables that track who are dominating and being dominated by + //============================================================================= + + CNetworkArray( bool, m_bPlayerDominated, MAX_PLAYERS+1 ); // array of state per other player whether player is dominating other players + CNetworkArray( bool, m_bPlayerDominatingMe, MAX_PLAYERS+1 ); // array of state per other player whether other players are dominating this player + + //============================================================================= + // HPE_END + //============================================================================= + + + + C_CSPlayer( const C_CSPlayer & ); +}; + +C_CSPlayer* GetLocalOrInEyeCSPlayer( void ); + +inline C_CSPlayer *ToCSPlayer( CBaseEntity *pEntity ) +{ + if ( !pEntity || !pEntity->IsPlayer() ) + return NULL; + + return dynamic_cast<C_CSPlayer*>( pEntity ); +} + +namespace vgui +{ + class IImage; +} + +vgui::IImage* GetDefaultAvatarImage( C_BasePlayer *pPlayer ); + + + + +#endif // C_CS_PLAYER_H |