mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-16 05:37:00 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user