summaryrefslogtreecommitdiff
path: root/game/client/tf2/c_basetfplayer.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf2/c_basetfplayer.h')
-rw-r--r--game/client/tf2/c_basetfplayer.h386
1 files changed, 386 insertions, 0 deletions
diff --git a/game/client/tf2/c_basetfplayer.h b/game/client/tf2/c_basetfplayer.h
new file mode 100644
index 0000000..b2fc64c
--- /dev/null
+++ b/game/client/tf2/c_basetfplayer.h
@@ -0,0 +1,386 @@
+//========= 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