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