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.
387 lines
11 KiB
387 lines
11 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#if !defined( C_BASETFPLAYER_H )
|
||
|
#define C_BASETFPLAYER_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "tf_vehicleshared.h"
|
||
|
#include "c_baseplayer.h"
|
||
|
#include "CommanderOverlay.h"
|
||
|
#include "hud_minimap.h"
|
||
|
#include "hud_targetreticle.h"
|
||
|
#include "c_tfplayerlocaldata.h"
|
||
|
#include "particlemgr.h"
|
||
|
#include "particle_prototype.h"
|
||
|
#include "particle_util.h"
|
||
|
#include "tf_playeranimstate.h"
|
||
|
|
||
|
class C_VehicleTeleportStation;
|
||
|
class CViewSetup;
|
||
|
class IMaterial;
|
||
|
class C_Order;
|
||
|
class C_BaseObject;
|
||
|
class C_PlayerClass;
|
||
|
class CPersonalShieldEffect;
|
||
|
class CBasePredictedWeapon;
|
||
|
class C_BaseViewModel;
|
||
|
class CUserCmd;
|
||
|
class C_WeaponCombatShield;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Client Side TF Player entity
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class C_BaseTFPlayer : public C_BasePlayer
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS( C_BaseTFPlayer, C_BasePlayer );
|
||
|
DECLARE_CLIENTCLASS();
|
||
|
DECLARE_ENTITY_PANEL();
|
||
|
DECLARE_MINIMAP_PANEL();
|
||
|
DECLARE_PREDICTABLE();
|
||
|
|
||
|
C_BaseTFPlayer();
|
||
|
virtual ~C_BaseTFPlayer();
|
||
|
|
||
|
private:
|
||
|
void Clear(); // Clear all elements.
|
||
|
|
||
|
public:
|
||
|
bool IsHidden() const;
|
||
|
bool IsDamageBoosted() const;
|
||
|
|
||
|
bool HasNamedTechnology( const char *name );
|
||
|
|
||
|
float LastAttackTime() const { return m_flLastAttackTime; }
|
||
|
void SetLastAttackTime( float flTime ) { m_flLastAttackTime = flTime; }
|
||
|
|
||
|
// Return this client's C_BaseTFPlayer pointer
|
||
|
static C_BaseTFPlayer* GetLocalPlayer( void )
|
||
|
{
|
||
|
return ( static_cast< C_BaseTFPlayer * >( C_BasePlayer::GetLocalPlayer() ) );
|
||
|
}
|
||
|
|
||
|
virtual void ClientThink( void );
|
||
|
virtual void OnPreDataChanged( DataUpdateType_t updateType );
|
||
|
virtual void OnDataChanged( DataUpdateType_t updateType );
|
||
|
virtual void PreDataUpdate( DataUpdateType_t updateType );
|
||
|
virtual void PostDataUpdate( DataUpdateType_t updateType );
|
||
|
virtual void ReceiveMessage( int classID, bf_read &msg );
|
||
|
virtual void Release( void );
|
||
|
|
||
|
virtual void ItemPostFrame( void );
|
||
|
|
||
|
virtual bool ShouldDraw();
|
||
|
virtual int DrawModel( int flags );
|
||
|
|
||
|
virtual void SetDormant( bool bDormant );
|
||
|
|
||
|
virtual void GetBoneControllers(float controllers[MAXSTUDIOBONES]);
|
||
|
|
||
|
virtual int GetRenderTeamNumber( void );
|
||
|
virtual void ComputeFxBlend( void );
|
||
|
virtual bool IsTransparent( void );
|
||
|
|
||
|
// Called by the view model if its rendering is being overridden.
|
||
|
virtual bool ViewModel_IsTransparent( void );
|
||
|
|
||
|
virtual bool IsOverridingViewmodel( void );
|
||
|
virtual int DrawOverriddenViewmodel( C_BaseViewModel *pViewmodel, int flags );
|
||
|
virtual void CreateMove( float flInputSampleTime, CUserCmd *pCmd );
|
||
|
virtual float GetDefaultAnimSpeed( void );
|
||
|
|
||
|
int GetClass( void );
|
||
|
|
||
|
// Called when not in tactical mode. Allows view to be overriden for things like driving a tank.
|
||
|
void OverrideView( CViewSetup *pSetup );
|
||
|
|
||
|
// Called when not in tactical mode. Allows view model drawing to be disabled for things like driving a tank.
|
||
|
bool ShouldDrawViewModel();
|
||
|
|
||
|
void GetTargetDescription( char *pDest, int bufferSize );
|
||
|
|
||
|
// Orders
|
||
|
void SetPersonalOrder( C_Order *pOrder );
|
||
|
void RemoveOrderTarget();
|
||
|
|
||
|
// Resources
|
||
|
int GetBankResources( void );
|
||
|
|
||
|
// Objects
|
||
|
void SetSelectedObject( C_BaseObject *pObject );
|
||
|
C_BaseObject *GetSelectedObject( void );
|
||
|
int GetNumObjects( int iObjectType );
|
||
|
int GetObjectCount( void );
|
||
|
C_BaseObject *GetObject( int index );
|
||
|
|
||
|
// Targets
|
||
|
void Add_Target( C_BaseEntity *pTarget, const char *sName );
|
||
|
void Remove_Target( C_BaseEntity *pTarget );
|
||
|
void Remove_Target( CTargetReticle *pTargetReticle );
|
||
|
|
||
|
void UpdateTargetReticles( void );
|
||
|
|
||
|
bool IsUsingThermalVision( void ) const;
|
||
|
|
||
|
// Weapon handling
|
||
|
virtual bool IsAllowedToSwitchWeapons( void );
|
||
|
virtual bool Weapon_ShouldSetLast( CBaseCombatWeapon *pOldWeapon, CBaseCombatWeapon *pNewWeapon );
|
||
|
virtual bool Weapon_ShouldSelectItem( CBaseCombatWeapon *pWeapon );
|
||
|
virtual C_BaseCombatWeapon *GetActiveWeaponForSelection( void );
|
||
|
virtual C_BaseCombatWeapon *GetLastWeaponBeforeObject( void ) { return m_hLastWeaponBeforeObject; }
|
||
|
|
||
|
virtual C_BaseAnimating* GetRenderedWeaponModel();
|
||
|
|
||
|
// ID Target
|
||
|
void SetIDEnt( C_BaseEntity *pEntity );
|
||
|
int GetIDTarget( void ) const;
|
||
|
void UpdateIDTarget( void );
|
||
|
|
||
|
bool IsKnockedDown( void ) const;
|
||
|
void CheckKnockdownState( void );
|
||
|
bool CheckKnockdownAngleOverride( void ) const;
|
||
|
void SetKnockdownAngles( const QAngle& ang );
|
||
|
void GetKnockdownAngles( QAngle& outAngles );
|
||
|
float GetKnockdownViewheightAdjust( void ) const;
|
||
|
|
||
|
// Team handling
|
||
|
virtual void TeamChange( int iNewTeam );
|
||
|
|
||
|
// Camouflage effect
|
||
|
virtual bool IsCamouflaged( void );
|
||
|
virtual float GetCamouflageAmount( void );
|
||
|
virtual float ComputeCamoEffectAmount( void ); // 0 - visible, 1 = invisible
|
||
|
virtual int ComputeCamoAlpha( void );
|
||
|
virtual void CheckCamoDampening( void );
|
||
|
virtual void SetCamoDampening( float amount );
|
||
|
virtual float GetDampeningAmount( void );
|
||
|
virtual void CheckCameraMovement( void );
|
||
|
|
||
|
IMaterial *GetCamoMaterial( void );
|
||
|
virtual float GetMovementCamoSuppression( void );
|
||
|
virtual void CheckMovementCamoSuppression( void );
|
||
|
virtual void SetMovementCamoSuppression( float amount );
|
||
|
|
||
|
// Adrenalin
|
||
|
void CheckAdrenalin( void );
|
||
|
|
||
|
void CheckLastMovement( void );
|
||
|
float GetLastMoveTime( void );
|
||
|
float GetOverlayAlpha( void );
|
||
|
|
||
|
float GetLastDamageTime( void ) const;
|
||
|
float GetLastGainHealthTime( void ) const;
|
||
|
|
||
|
// Powerups
|
||
|
virtual void PowerupStart( int iPowerup, bool bInitial );
|
||
|
virtual void PowerupEnd( int iPowerup );
|
||
|
|
||
|
// Sniper
|
||
|
bool IsDeployed( void );
|
||
|
bool IsDeploying( void );
|
||
|
bool IsUnDeploying( void );
|
||
|
|
||
|
virtual void AddEntity( void );
|
||
|
|
||
|
// Vertification
|
||
|
inline bool HasClass( void ) { return GetPlayerClass() != NULL; }
|
||
|
|
||
|
bool IsClass( TFClass iClass );
|
||
|
|
||
|
|
||
|
virtual int GetMaxHealth() const { return m_iMaxHealth; }
|
||
|
|
||
|
bool ClassProxyUpdate( int nClassID );
|
||
|
|
||
|
// Should this object cast shadows?
|
||
|
virtual ShadowType_t ShadowCastType();
|
||
|
|
||
|
// Prediction stuff
|
||
|
virtual void PreThink( void );
|
||
|
virtual void PostThink( void );
|
||
|
|
||
|
// Combat prototyping
|
||
|
bool IsBlocking( void ) const { return m_bIsBlocking; }
|
||
|
bool IsParrying( void ) const { return m_bIsParrying; }
|
||
|
void SetBlocking( bool bBlocking ) { m_bIsBlocking = bBlocking; }
|
||
|
void SetParrying( bool bParrying ) { m_bIsParrying = bParrying; }
|
||
|
|
||
|
// Vehicles
|
||
|
void SetVehicleRole( int nRole );
|
||
|
bool CanGetInVehicle( void );
|
||
|
|
||
|
// Returns true if we're in a vehicle and it's mounted on another vehicle
|
||
|
// (ie: are we in a manned gun that's mounted on a tank).
|
||
|
bool IsVehicleMounted() const;
|
||
|
|
||
|
virtual bool IsUseableEntity( CBaseEntity *pEntity );
|
||
|
|
||
|
// Shared Client / Server code
|
||
|
public:
|
||
|
bool IsHittingShield( const Vector &vecVelocity, float *flDamage );
|
||
|
C_WeaponCombatShield *GetCombatShield( void );
|
||
|
virtual void PainSound( void );
|
||
|
|
||
|
public:
|
||
|
// Data for only the local player
|
||
|
CTFPlayerLocalData m_TFLocal;
|
||
|
|
||
|
// Accessors...
|
||
|
const QAngle& DeployedAngles() const { return m_vecDeployedAngles; }
|
||
|
int ZoneState() const { return m_iCurrentZoneState; }
|
||
|
float CamouflageAmount() const { return m_flCamouflageAmount; }
|
||
|
int PlayerClass() const { return m_iPlayerClass; }
|
||
|
C_PlayerClass *GetPlayerClass();
|
||
|
C_Order *PersonalOrder() { return m_hPersonalOrder; }
|
||
|
C_BaseEntity *SpawnPoint() { return m_hSpawnPoint.Get(); }
|
||
|
|
||
|
C_VehicleTeleportStation* GetSelectedMCV() const;
|
||
|
|
||
|
// Object sapper placement handling
|
||
|
//float m_flSapperAttachmentFinishTime;
|
||
|
//float m_flSapperAttachmentStartTime;
|
||
|
//CHandle< CGrenadeObjectSapper > m_hSapper;
|
||
|
//CHandle< CBaseObject > m_hSappedObject;
|
||
|
CHealthBarPanel *m_pSapperAttachmentStatus;
|
||
|
|
||
|
private:
|
||
|
C_BaseTFPlayer( const C_BaseTFPlayer & );
|
||
|
|
||
|
// Client-side obstacle avoidance
|
||
|
void PerformClientSideObstacleAvoidance( float flFrameTime, CUserCmd *pCmd );
|
||
|
|
||
|
float m_flLastAttackTime;
|
||
|
|
||
|
EHANDLE m_hSelectedMCV;
|
||
|
|
||
|
// Weapon used before switching to an object placement
|
||
|
CHandle<C_BaseCombatWeapon> m_hLastWeaponBeforeObject;
|
||
|
|
||
|
float m_flCamouflageAmount;
|
||
|
|
||
|
// Movement.
|
||
|
Vector m_vecPosDelta;
|
||
|
|
||
|
enum { MOMENTUM_MAXSIZE = 10 };
|
||
|
float m_aMomentum[MOMENTUM_MAXSIZE];
|
||
|
int m_iMomentumHead;
|
||
|
|
||
|
// Player Class
|
||
|
int m_iPlayerClass;
|
||
|
C_AllPlayerClasses m_PlayerClasses;
|
||
|
|
||
|
// Spawn location...
|
||
|
EHANDLE m_hSpawnPoint;
|
||
|
|
||
|
// Orders
|
||
|
CHandle< C_Order > m_hSelectedOrder;
|
||
|
CHandle< C_Order > m_hPersonalOrder;
|
||
|
int m_iSelectedTarget;
|
||
|
int m_iPersonalTarget;
|
||
|
CUtlVector< CTargetReticle * > m_aTargetReticles; // A list of entities to show target reticles for
|
||
|
|
||
|
// Objects
|
||
|
CHandle< C_BaseObject > m_hSelectedObject;
|
||
|
|
||
|
int m_iLastHealth;
|
||
|
|
||
|
bool m_bIsBlocking;
|
||
|
bool m_bIsParrying;
|
||
|
|
||
|
bool m_bUnderAttack;
|
||
|
int m_iMaxHealth;
|
||
|
bool m_bDeployed;
|
||
|
bool m_bDeploying;
|
||
|
bool m_bUnDeploying;
|
||
|
QAngle m_vecDeployedAngles;
|
||
|
int m_iCurrentZoneState;
|
||
|
int m_TFPlayerFlags;
|
||
|
|
||
|
int m_nOldTacticalView;
|
||
|
int m_nOldPlayerClass;
|
||
|
|
||
|
float m_flNextUseCheck;
|
||
|
|
||
|
bool m_bOldThermalVision;
|
||
|
bool m_bOldAttachingSapper;
|
||
|
|
||
|
bool m_bOldKnockDownState;
|
||
|
float m_flStartKnockdown;
|
||
|
float m_flEndKnockdown;
|
||
|
QAngle m_vecOriginalViewAngles;
|
||
|
QAngle m_vecCurrentKnockdownAngles;
|
||
|
QAngle m_vecKnockDownGoalAngles;
|
||
|
bool m_bKnockdownOverrideAngles;
|
||
|
float m_flKnockdownViewheightAdjust;
|
||
|
|
||
|
CPlayerAnimState m_PlayerAnimState;
|
||
|
|
||
|
// For sniper hiding
|
||
|
float m_flLastMoveTime;
|
||
|
Vector m_vecLastOrigin;
|
||
|
|
||
|
// For material proxies
|
||
|
float m_flLastDamageTime;
|
||
|
float m_flLastGainHealthTime;
|
||
|
|
||
|
IMaterial *m_pThermalMaterial;
|
||
|
IMaterial *m_pCamoEffectMaterial;
|
||
|
|
||
|
// Camouflage
|
||
|
float m_flDampeningAmount;
|
||
|
float m_flGoalDampeningAmount;
|
||
|
float m_flDampeningStayoutTime;
|
||
|
|
||
|
// Suppression of camo based on movement
|
||
|
float m_flMovementCamoSuppression;
|
||
|
float m_flGoalMovementCamoSuppressionAmount;
|
||
|
float m_flMovementCamoSuppressionStayoutTime;
|
||
|
|
||
|
// Adrenalin
|
||
|
float m_flNextAdrenalinEffect;
|
||
|
bool m_bFadingIn;
|
||
|
|
||
|
// ID Target
|
||
|
int m_iIDEntIndex;
|
||
|
|
||
|
CMaterialReference m_BoostMaterial;
|
||
|
CMaterialReference m_EMPMaterial;
|
||
|
float m_BoostModelAngles[3];
|
||
|
|
||
|
// Personal shield effects.
|
||
|
CUtlLinkedList<CPersonalShieldEffect*, int> m_PersonalShieldEffects;
|
||
|
|
||
|
CHandle< C_WeaponCombatShield > m_hWeaponCombatShield;
|
||
|
|
||
|
// No one should call this
|
||
|
C_BaseTFPlayer& operator=( const C_BaseTFPlayer& src );
|
||
|
|
||
|
friend void RecvProxy_PlayerClass( const CRecvProxyData *pData, void *pStruct, void *pOut );
|
||
|
|
||
|
|
||
|
friend class CTFPrediction;
|
||
|
};
|
||
|
|
||
|
int GetLocalPlayerClass( void );
|
||
|
bool IsLocalPlayerClass( int iClass );
|
||
|
bool IsLocalPlayerInTactical( );
|
||
|
inline C_BaseTFPlayer *ToBaseTFPlayer( C_BaseEntity *pEntity )
|
||
|
{
|
||
|
if ( !pEntity || !pEntity->IsPlayer() )
|
||
|
return NULL;
|
||
|
|
||
|
#if _DEBUG
|
||
|
return dynamic_cast<C_BaseTFPlayer *>( pEntity );
|
||
|
#else
|
||
|
return static_cast<C_BaseTFPlayer *>( pEntity );
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
#endif // C_BASETFPLAYER_H
|