You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
7.8 KiB
285 lines
7.8 KiB
3 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef C_DOD_PLAYER_H
|
||
|
#define C_DOD_PLAYER_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#include "dod_playeranimstate.h"
|
||
|
#include "c_baseplayer.h"
|
||
|
#include "dod_shareddefs.h"
|
||
|
#include "baseparticleentity.h"
|
||
|
#include "dod_player_shared.h"
|
||
|
#include "beamdraw.h"
|
||
|
#include "hintsystem.h"
|
||
|
|
||
|
#define PRONE_MAX_SWAY 3.0
|
||
|
#define PRONE_SWAY_AMOUNT 4.0
|
||
|
#define RECOIL_DURATION 0.1
|
||
|
|
||
|
class CViewAngleAnimation;
|
||
|
|
||
|
class C_DODPlayer : public C_BasePlayer
|
||
|
{
|
||
|
public:
|
||
|
friend class CDODPlayerShared;
|
||
|
|
||
|
DECLARE_CLASS( C_DODPlayer, C_BasePlayer );
|
||
|
DECLARE_CLIENTCLASS();
|
||
|
DECLARE_PREDICTABLE();
|
||
|
DECLARE_INTERPOLATION();
|
||
|
|
||
|
C_DODPlayer();
|
||
|
~C_DODPlayer();
|
||
|
|
||
|
static C_DODPlayer* GetLocalDODPlayer();
|
||
|
|
||
|
virtual const QAngle& GetRenderAngles();
|
||
|
virtual void UpdateClientSideAnimation();
|
||
|
virtual void ProcessMuzzleFlashEvent();
|
||
|
virtual void PostDataUpdate( DataUpdateType_t updateType );
|
||
|
|
||
|
virtual bool CreateMove( float flInputSampleTime, CUserCmd *pCmd );
|
||
|
|
||
|
virtual void FireEvent( const Vector& origin, const QAngle& angles, int event, const char *options );
|
||
|
|
||
|
virtual void OnDataChanged( DataUpdateType_t type );
|
||
|
virtual void NotifyShouldTransmit( ShouldTransmitState_t state );
|
||
|
virtual void ClientThink( void );
|
||
|
virtual void GetToolRecordingState( KeyValues *msg );
|
||
|
|
||
|
void LocalPlayerRespawn( void );
|
||
|
|
||
|
// Returns true if we're allowed to show the menus right now.
|
||
|
bool CanShowTeamMenu() const { return true; }
|
||
|
|
||
|
bool CanShowClassMenu();
|
||
|
|
||
|
bool ShouldDraw( void );
|
||
|
|
||
|
virtual C_BaseAnimating * BecomeRagdollOnClient();
|
||
|
virtual IRagdoll* GetRepresentativeRagdoll() const;
|
||
|
|
||
|
virtual void ReceiveMessage( int classID, bf_read &msg );
|
||
|
void PopHelmet( Vector vecDir, Vector vecForceOffset, int model );
|
||
|
|
||
|
// 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
|
||
|
{
|
||
|
return m_iIDEntIndex;
|
||
|
}
|
||
|
|
||
|
void UpdateIDTarget();
|
||
|
|
||
|
bool ShouldAutoReload( void );
|
||
|
bool ShouldAutoRezoom( void );
|
||
|
|
||
|
void SetSprinting( bool bIsSprinting );
|
||
|
bool IsSprinting( void );
|
||
|
|
||
|
void LowerWeapon( void );
|
||
|
void RaiseWeapon( void );
|
||
|
bool IsWeaponLowered( void );
|
||
|
|
||
|
virtual ShadowType_t ShadowCastType( void );
|
||
|
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 int DrawModel( int flags );
|
||
|
virtual void Simulate();
|
||
|
|
||
|
virtual float GetMinFOV() const { return 20; }
|
||
|
virtual bool SetFOV( CBaseEntity *pRequester, int FOV, float zoomRate = 0.0f );
|
||
|
|
||
|
virtual void CreateLightEffects( void ) {} //no dimlight effects
|
||
|
|
||
|
virtual Vector GetChaseCamViewOffset( CBaseEntity *target );
|
||
|
virtual const QAngle& EyeAngles();
|
||
|
virtual const Vector& GetRenderOrigin(); // return ragdoll origin if dead
|
||
|
|
||
|
bool dod_IsInterpolationEnabled( void ) { return IsInterpolationEnabled(); }
|
||
|
|
||
|
void CreateViewAngleAnimations( void );
|
||
|
|
||
|
void CheckGrenadeHint( Vector vecGrenadeOrigin );
|
||
|
void CheckBombTargetPlantHint( void );
|
||
|
void CheckBombTargetDefuseHint( void );
|
||
|
|
||
|
virtual void ComputeWorldSpaceSurroundingBox( Vector *pVecWorldMins, Vector *pVecWorldMaxs );
|
||
|
|
||
|
// Hints
|
||
|
virtual CHintSystem *Hints( void ) { return &m_Hints; }
|
||
|
|
||
|
// Player avoidance
|
||
|
bool ShouldCollide( int collisionGroup, int contentsMask ) const;
|
||
|
void AvoidPlayers( CUserCmd *pCmd );
|
||
|
|
||
|
virtual bool ShouldReceiveProjectedTextures( int flags )
|
||
|
{
|
||
|
return ( this != C_BasePlayer::GetLocalPlayer() );
|
||
|
}
|
||
|
|
||
|
bool IsNemesisOfLocalPlayer();
|
||
|
bool ShouldShowNemesisIcon();
|
||
|
|
||
|
virtual void OnAchievementAchieved( int iAchievement );
|
||
|
|
||
|
int GetActiveAchievementAward( void );
|
||
|
IMaterial *GetHeadIconMaterial( void );
|
||
|
|
||
|
protected:
|
||
|
virtual void CalcObserverView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov );
|
||
|
void CalcDODDeathCamView( Vector &eyeOrigin, QAngle& eyeAngles, float& fov );
|
||
|
void CalcChaseCamView(Vector& eyeOrigin, QAngle& eyeAngles, float& fov);
|
||
|
virtual void CalcFreezeCamView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov );
|
||
|
|
||
|
|
||
|
// Called by shared code.
|
||
|
public:
|
||
|
|
||
|
void DoAnimationEvent( PlayerAnimEvent_t event, int nData = 0 );
|
||
|
|
||
|
DODPlayerState State_Get() const;
|
||
|
|
||
|
IDODPlayerAnimState *m_PlayerAnimState;
|
||
|
|
||
|
|
||
|
QAngle m_angEyeAngles;
|
||
|
CInterpolatedVar< QAngle > m_iv_angEyeAngles;
|
||
|
|
||
|
void FireBullets( const FireBulletsInfo_t &info );
|
||
|
bool CanAttack( void );
|
||
|
|
||
|
void SetBazookaDeployed( bool bDeployed ) {}
|
||
|
|
||
|
// the control point index the player is near
|
||
|
int GetCPIndex( void ) { return m_Shared.GetCPIndex(); }
|
||
|
|
||
|
//Implemented in shared code
|
||
|
public:
|
||
|
virtual void SharedSpawn();
|
||
|
|
||
|
void CheckProneMoveSound( int groundspeed, bool onground );
|
||
|
virtual void UpdateStepSound( surfacedata_t *psurface, const Vector &vecOrigin, const Vector &vecVelocity );
|
||
|
virtual void PlayStepSound( Vector &vecOrigin, surfacedata_t *psurface, float fvol, bool force );
|
||
|
|
||
|
virtual const Vector GetPlayerMins( void ) const; // uses local player
|
||
|
virtual const Vector GetPlayerMaxs( void ) const; // uses local player
|
||
|
|
||
|
// Returns true if the player is allowed to move.
|
||
|
bool CanMove() const;
|
||
|
float GetStamina( void ) const;
|
||
|
void SetStamina( float flStamina );
|
||
|
|
||
|
virtual void SetAnimation( PLAYER_ANIM playerAnim );
|
||
|
|
||
|
CDODPlayerShared m_Shared;
|
||
|
|
||
|
float m_flRecoilTimeRemaining;
|
||
|
float m_flPitchRecoilAccumulator;
|
||
|
float m_flYawRecoilAccumulator;
|
||
|
|
||
|
void GetWeaponRecoilAmount( int weaponId, float &flPitchRecoil, float &flYawRecoil );
|
||
|
void DoRecoil( int iWpnID, float flWpnRecoil );
|
||
|
void SetRecoilAmount( float flPitchRecoil, float flYawRecoil );
|
||
|
void GetRecoilToAddThisFrame( float &flPitchRecoil, float &flYawRecoil );
|
||
|
|
||
|
EHANDLE m_hRagdoll;
|
||
|
|
||
|
CWeaponDODBase* GetActiveDODWeapon() const;
|
||
|
|
||
|
Activity TranslateActivity( Activity baseAct, bool *pRequired = NULL );
|
||
|
|
||
|
Vector m_lastStandingPos; // used by the gamemovement code for finding ladders
|
||
|
|
||
|
// for stun effect
|
||
|
float m_flStunEffectTime;
|
||
|
float m_flStunAlpha;
|
||
|
CNetworkVar( float, m_flStunMaxAlpha );
|
||
|
CNetworkVar( float, m_flStunDuration );
|
||
|
|
||
|
float GetDeathTime( void ) { return m_flDeathTime; }
|
||
|
|
||
|
// 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 );
|
||
|
|
||
|
float m_flLastRespawnTime;
|
||
|
|
||
|
private:
|
||
|
C_DODPlayer( const C_DODPlayer & );
|
||
|
|
||
|
CNetworkVar( DODPlayerState, m_iPlayerState );
|
||
|
|
||
|
CNetworkVar( float, m_flStamina );
|
||
|
|
||
|
float m_flProneViewOffset;
|
||
|
bool m_bProneSwayingRight;
|
||
|
Vector m_vecRagdollVelocity;
|
||
|
|
||
|
// ID Target
|
||
|
int m_iIDEntIndex;
|
||
|
|
||
|
bool m_bWeaponLowered; // should our weapon be lowered right now
|
||
|
|
||
|
CNetworkVar( bool, m_bSpawnInterpCounter );
|
||
|
bool m_bSpawnInterpCounterCache;
|
||
|
|
||
|
CHintSystem m_Hints;
|
||
|
|
||
|
void ReleaseFlashlight( void );
|
||
|
Beam_t *m_pFlashlightBeam;
|
||
|
|
||
|
float m_flMinNextStepSoundTime;
|
||
|
|
||
|
float m_fNextThinkPushAway;
|
||
|
|
||
|
bool m_bPlayingProneMoveSound;
|
||
|
|
||
|
void StaminaSoundThink( void );
|
||
|
CSoundPatch *m_pStaminaSound;
|
||
|
bool m_bPlayingLowStaminaSound;
|
||
|
|
||
|
// Cold Breath
|
||
|
bool CreateColdBreathEmitter( void );
|
||
|
void DestroyColdBreathEmitter( void );
|
||
|
void UpdateColdBreath( void );
|
||
|
void EmitColdBreathParticles( void );
|
||
|
|
||
|
bool m_bColdBreathOn;
|
||
|
float m_flColdBreathTimeStart;
|
||
|
float m_flColdBreathTimeEnd;
|
||
|
CSmartPtr<CSimpleEmitter> m_hColdBreathEmitter;
|
||
|
PMaterialHandle m_hColdBreathMaterial;
|
||
|
int m_iHeadAttach;
|
||
|
|
||
|
float m_flHideHeadIconUntilTime;
|
||
|
|
||
|
virtual void CalculateIKLocks( float currentTime );
|
||
|
|
||
|
int m_iAchievementAwardsMask;
|
||
|
IMaterial *m_pHeadIconMaterial;
|
||
|
};
|
||
|
|
||
|
inline C_DODPlayer *ToDODPlayer( CBaseEntity *pEntity )
|
||
|
{
|
||
|
if ( !pEntity || !pEntity->IsPlayer() )
|
||
|
return NULL;
|
||
|
|
||
|
return dynamic_cast<C_DODPlayer*>( pEntity );
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif // C_DOD_PLAYER_H
|