source-engine/game/client/dod/c_dod_player.h
2022-04-16 12:05:19 +03:00

285 lines
7.8 KiB
C++

//========= 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