mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 21:26:57 +00:00
1
This commit is contained in:
@@ -0,0 +1,596 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef TF_PLAYER_H
|
||||
#define TF_PLAYER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "player.h"
|
||||
#include "tf_shareddefs.h"
|
||||
#include "tf_playerlocaldata.h"
|
||||
#include "tf_playerclass.h"
|
||||
#include "iscorer.h"
|
||||
#include "tf_playeranimstate.h"
|
||||
#include "vphysics/player_controller.h"
|
||||
|
||||
#define MENU_STRING_BUFFER_SIZE 512
|
||||
#define MENU_MSG_TEXTCHUNK_SIZE 50
|
||||
#define MENU_UPDATETIME 2.0
|
||||
|
||||
class CVehicleTeleportStation;
|
||||
class CPlayerClass;
|
||||
class CThrownGrenade;
|
||||
class CFlybyPoint;
|
||||
class CMenu;
|
||||
class CControlZone;
|
||||
class CTechnologyTree;
|
||||
class CTFTeam;
|
||||
class CWeaponBuilder;
|
||||
class CWeaponCombatShield;
|
||||
class COrder;
|
||||
class CBaseTFCombatWeapon;
|
||||
class CResourceZone;
|
||||
class CRagdollShadow;
|
||||
class CBaseObject;
|
||||
class CBasePredictedWeapon;
|
||||
class IVehicle;
|
||||
enum ResupplyReason_t;
|
||||
|
||||
// If disguised player fires weapon, suppress disguise for this long
|
||||
#define DISGUISE_FIRE_SUPPRESSTIME 4.0f
|
||||
// If there are enemies within this radius, then
|
||||
// firing your weapon will cause you to lose your
|
||||
// disguise for DISGUISE_FIRE_SUPPRESSTIME
|
||||
#define DISGUISE_SUPPRESSION_RADIUS 1024.0f
|
||||
// Can only initiate disguise if no enemies within this radius
|
||||
#define DISGUISE_START_RADIUS 512.0f
|
||||
|
||||
// Adrenalin
|
||||
#define ADRENALIN_DAMAGE_REDUCTION 0.5 // Damage reduction during adrenalin
|
||||
#define ADRENALIN_SPEED_INCREASE 1.2 // Movement speed increase during adrenalin
|
||||
#define ADRENALIN_RAMPAGE_EXTEND 5.0 // Time gained from killing an enemy during rampage
|
||||
|
||||
// ID
|
||||
#define MAX_ID_RANGE 2048
|
||||
|
||||
// Setup for class specific touch functions.
|
||||
#define SetClassTouch( _player, a ) _player->SetTouch( CBaseTFPlayer::ClassTouch ); _player->m_pfnClassTouch = static_cast<void (CPlayerClass::*)(CBaseEntity*)>(a)
|
||||
|
||||
//=====================================================================
|
||||
// TF PLAYER
|
||||
//=====================================================================
|
||||
class CBaseTFPlayer : public CBasePlayer, public IScorer
|
||||
{
|
||||
typedef CBasePlayer BaseClass;
|
||||
public:
|
||||
DECLARE_CLASS( CBaseTFPlayer, CBasePlayer );
|
||||
DECLARE_SERVERCLASS();
|
||||
DECLARE_DATADESC();
|
||||
DECLARE_PREDICTABLE();
|
||||
|
||||
CBaseTFPlayer();
|
||||
~CBaseTFPlayer();
|
||||
|
||||
// For updating hud tech tree
|
||||
struct tfplayertech_t
|
||||
{
|
||||
int m_nAvailable;
|
||||
int m_nUserCount;
|
||||
int m_nResourceLevel;
|
||||
};
|
||||
|
||||
// Helper to get a CBaseTFPlayer by its entity index.
|
||||
static CBaseTFPlayer* Instance( int iEnt )
|
||||
{
|
||||
return dynamic_cast< CBaseTFPlayer* >( CBaseEntity::Instance( INDEXENT( iEnt ) ) );
|
||||
}
|
||||
|
||||
bool IsHidden() const;
|
||||
void SetHidden( bool bHidden );
|
||||
|
||||
// Class specific touch functions.
|
||||
void ClassTouch( CBaseEntity *pTouched );
|
||||
|
||||
// This normally wouldn't go in here but we have to access CAllPlayerClasses and that is private.
|
||||
const char* GetClassModelString( int iClass, int iTeam );
|
||||
|
||||
// The player class touch function
|
||||
void (CPlayerClass ::*m_pfnClassTouch)( CBaseEntity *pOther );
|
||||
|
||||
// Override CBaseAnimatingOverlay to zero out m_dweights by default
|
||||
virtual int AddGesture( Activity activity, bool autokill = true );
|
||||
|
||||
// Hacky shield stuff for now
|
||||
void RemoveShieldOverlays( void );
|
||||
int RemoveShieldOverlaysExcept( Activity activity, bool addifnotpresent = true );
|
||||
Activity ShieldTranslateActivity( Activity activity );
|
||||
void PickShieldAnimation( Activity& activity, int& overlayindex,
|
||||
bool moving, bool ducked,
|
||||
Activity overlay, Activity crouch, Activity normal,
|
||||
bool autokill = true, float blendin = 0.0f, float blendout = 0.0f );
|
||||
|
||||
// True if player was moving last time checked (used to switch between shield full body and overlay anims )
|
||||
bool m_bWasMoving;
|
||||
|
||||
virtual void UpdateOnRemove( void );
|
||||
|
||||
static CBaseTFPlayer *CreatePlayer( const char *className, edict_t *ed )
|
||||
{
|
||||
CBaseTFPlayer::s_PlayerEdict = ed;
|
||||
return (CBaseTFPlayer*)CreateEntityByName( className );
|
||||
}
|
||||
|
||||
virtual int UpdateTransmitState();
|
||||
virtual int ShouldTransmit( const CCheckTransmitInfo *pInfo );
|
||||
// Networking is about to update this player, let it override and specify it's own pvs
|
||||
virtual void SetupVisibility( CBaseEntity *pViewEntity, unsigned char *pvs, int pvssize );
|
||||
|
||||
virtual void Spawn( void );
|
||||
virtual void InitialSpawn( void );
|
||||
virtual void ForceRespawn( void );
|
||||
virtual void UpdateClientData( void );
|
||||
|
||||
virtual void ForceClientDllUpdate( void ); // Forces all client .dll specific data to be resent to client.
|
||||
|
||||
virtual void Precache( void );
|
||||
|
||||
virtual void InitHUD( void );
|
||||
virtual void SelectItem( const char *pstr, int iSubType = 0 );
|
||||
|
||||
virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
virtual int ObjectCaps( void );
|
||||
|
||||
// Override
|
||||
virtual bool CanSpeak( void );
|
||||
|
||||
void ResetViewOffset( void );
|
||||
|
||||
// Input handlers
|
||||
void InputRespawn( inputdata_t &inputdata );
|
||||
|
||||
// Team Handling
|
||||
CTFTeam *GetTFTeam( void ) { return (CTFTeam*)GetTeam(); };
|
||||
CTechnologyTree *GetTechTree( void );
|
||||
virtual void ChangeTeam( int iTeamNum ) OVERRIDE;
|
||||
void PlacePlayerInTeam( void );
|
||||
|
||||
// Class Handling
|
||||
int PlayerClass( void );
|
||||
bool IsClass( TFClass iClass );
|
||||
bool IsSameClass( CBaseTFPlayer* pPlayer ) { Assert(pPlayer); return IsClass( (TFClass)pPlayer->PlayerClass() ); }
|
||||
|
||||
void ChangeClass( TFClass iClass );
|
||||
bool IsClassAvailable( TFClass iClass );
|
||||
void SetPlayerModel( void );
|
||||
CPlayerClass *GetPlayerClass();
|
||||
void ClearPlayerClass( void );
|
||||
void SetPlayerClass( TFClass iClass );
|
||||
|
||||
int ClassCostAdjustment( ResupplyBuyType_t nType );
|
||||
|
||||
// Menu Handling
|
||||
void MenuDisplay( void );
|
||||
bool MenuInput( int iInput );
|
||||
void MenuReset( void );
|
||||
|
||||
// Standard functions
|
||||
virtual void ItemPostFrame();
|
||||
|
||||
virtual void Jump( void );
|
||||
|
||||
void PostThink( void );
|
||||
void PreThink( void );
|
||||
void PlayerRespawn( void );
|
||||
CBaseEntity *EntSelectSpawnPoint( void );
|
||||
|
||||
// Death
|
||||
virtual void DeathSound( const CTakeDamageInfo &info );
|
||||
virtual void PainSound( const CTakeDamageInfo &info );
|
||||
virtual void Event_Killed( const CTakeDamageInfo &info );
|
||||
void TFPlayerDeathThink( void );
|
||||
|
||||
virtual void CheatImpulseCommands( int iImpulse );
|
||||
virtual bool ClientCommand( const CCommand &args );
|
||||
virtual void SetAnimation( PLAYER_ANIM playerAnim );
|
||||
|
||||
// Combat
|
||||
void RecalculateSpeed( void );
|
||||
void KilledPlayer( CBaseTFPlayer *pVictim );
|
||||
|
||||
int TakeHealth( float flHealth, int bitsDamageType );
|
||||
|
||||
// Combat
|
||||
virtual int OnTakeDamage( const CTakeDamageInfo &info );
|
||||
virtual void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr );
|
||||
void ShowPersonalShieldEffect( const Vector &vOffsetFromEnt, const Vector &vIncomingDirection, float flDamage );
|
||||
|
||||
// Objects
|
||||
void AddObject( CBaseObject *pObject );
|
||||
void RemoveObject( CBaseObject *pObject );
|
||||
int CanBuild( int iObjectType );
|
||||
int GetNumObjects( int iObjectType );
|
||||
int GetObjectCount( );
|
||||
CBaseObject *GetObject( int iObjectIndex );
|
||||
bool IsBuilding( void );
|
||||
void OwnedObjectDestroyed( CBaseObject *pObject );
|
||||
void StopPlacement( void );
|
||||
int StartedBuildingObject( int iObjectType );
|
||||
void StoppedBuilding( int iObjectType );
|
||||
void FinishedObject( CBaseObject *pObject );
|
||||
void SetWeaponBuilder( CWeaponBuilder *pBuilder );
|
||||
CWeaponBuilder *GetWeaponBuilder( void );
|
||||
CWeaponCombatShield *GetCombatShield( void );
|
||||
void OwnedObjectChangeTeam( CBaseObject *pObject, CBaseTFPlayer *pNewOwner );
|
||||
void RemoveAllObjects( bool bForceAll = false, int iClass = 0, bool bReturnResources = false );
|
||||
|
||||
int NumPumpsOnResourceZone( CResourceZone *pZone );
|
||||
|
||||
// Deployment
|
||||
void StartDeploying( void );
|
||||
void StartUnDeploying( void );
|
||||
void CheckDeployFinish( void );
|
||||
void FinishDeploying( void );
|
||||
void FinishUnDeploying( void );
|
||||
bool IsDeployed( void );
|
||||
bool IsDeploying( void );
|
||||
bool IsUnDeploying( void );
|
||||
|
||||
// Movement prevention
|
||||
bool CantMove( void );
|
||||
void SetCantMove( bool bCantMove );
|
||||
|
||||
bool HasNamedTechnology( const char *name );
|
||||
void SetPreferredTechnology( CTechnologyTree *pTechnologyTree, int iTechIndex );
|
||||
int GetPreferredTechnology( void );
|
||||
tfplayertech_t &AvailableTech( int i ) { return m_rgClientTechAvail[i]; }
|
||||
|
||||
// Powerups
|
||||
virtual void PowerupStart( int iPowerup, float flAmount, CBaseEntity *pAttacker, CDamageModifier *pDamageModifier );
|
||||
virtual void PowerupEnd( int iPowerup );
|
||||
virtual float PowerupDuration( int iPowerup, float flTime );
|
||||
|
||||
void SetRampage( bool bRampage );
|
||||
float GetDefaultAnimSpeed( void );
|
||||
|
||||
// Knockdown
|
||||
void KnockDownPlayer( const Vector& sourceDir, float velocity, float duration );
|
||||
bool IsKnockedDown( void );
|
||||
|
||||
// Resources
|
||||
void AddBankResources( int iAmount );
|
||||
void RemoveBankResources( int iAmount, bool bSpent = true );
|
||||
void DonateResources( CBaseTFPlayer *pTarget, int pCount );
|
||||
int GetBankResources( void );
|
||||
void SetBankResources( int iAmount );
|
||||
|
||||
// Check for a collision....
|
||||
bool IsHittingShield( const Vector &vecVelocity, float *flDamage );
|
||||
|
||||
// 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; }
|
||||
|
||||
// Thermal Vision
|
||||
bool IsUsingThermalVision( void );
|
||||
void SetUsingThermalVision( bool thermal );
|
||||
|
||||
CTFPlayerLocalData *GetLocalData() { return &m_TFLocal; }
|
||||
|
||||
// Acts
|
||||
void CleanupOnActStart( void );
|
||||
|
||||
// Resource chunks
|
||||
bool AddResourceChunks( int iChunks, bool bProcessed );
|
||||
void RemoveResourceChunks( int iChunks, bool bProcessed );
|
||||
int GetTotalResourceChunks( void );
|
||||
int GetResourceChunkCount( bool bProcessed );
|
||||
|
||||
void SetGagged( bool gag );
|
||||
|
||||
// Control zone
|
||||
CControlZone* GetCurrentZone( ) { return m_pCurrentZone; }
|
||||
void SetCurrentZone( CControlZone* pZone ) { m_pCurrentZone = pZone; }
|
||||
|
||||
// Camouflage
|
||||
float GetCamouflageAmount( void ) { return m_flCamouflageAmount; };
|
||||
bool IsCamouflaged( void );
|
||||
void SetCamouflaged( int percentage, float changerate );
|
||||
void ClearCamouflage( void );
|
||||
|
||||
float LastAttackTime() const { return m_flLastAttackTime; }
|
||||
void SetLastAttackTime( float flTime ) { m_flLastAttackTime = flTime; }
|
||||
|
||||
bool ResupplyAmmo( float flFraction, ResupplyReason_t reason );
|
||||
|
||||
// The last time we were damaged by an enemy.
|
||||
double LastTimeDamagedByEnemy() const { return m_flLastTimeDamagedByEnemy; }
|
||||
|
||||
// Orders
|
||||
COrder* GetOrder( void ) { return m_hSelectedOrder; }
|
||||
void SetOrder( COrder *pOrder );
|
||||
|
||||
// Count resource zone orders.
|
||||
int GetNumResourceZoneOrders();
|
||||
|
||||
// Reinforcement
|
||||
bool IsReadyToReinforce( void );
|
||||
void Reinforce( void );
|
||||
|
||||
void ShowTacticalView( bool bTactical );
|
||||
|
||||
void SetRespawnStation( CBaseEntity *pStation );
|
||||
|
||||
// ID
|
||||
void SetIDEnt( CBaseEntity *pEntity );
|
||||
|
||||
// Health boosts
|
||||
void TakeHealthBoost( int iHealthBoost, int iTarget, int iDuration );
|
||||
|
||||
// Vehicle
|
||||
bool CanGetInVehicle( void );
|
||||
|
||||
CVehicleTeleportStation* GetSelectedMCV() const;
|
||||
void SetSelectedMCV( CVehicleTeleportStation *pMCV );
|
||||
|
||||
// Weapon handling
|
||||
virtual bool Weapon_ShouldSetLast( CBaseCombatWeapon *pOldWeapon, CBaseCombatWeapon *pNewWeapon );
|
||||
virtual bool Weapon_ShouldSelectItem( CBaseCombatWeapon *pWeapon );
|
||||
virtual CBaseCombatWeapon *GetLastWeaponBeforeObject( void ) { return m_hLastWeaponBeforeObject; }
|
||||
|
||||
// Sapper attaching
|
||||
bool IsAttachingSapper( void );
|
||||
float GetSapperAttachmentTime( void );
|
||||
void StartAttachingSapper( CBaseObject *pObject, CGrenadeObjectSapper *pSapper );
|
||||
void CleanupAfterAttaching( void );
|
||||
void StopAttaching( void );
|
||||
void FinishAttaching( void );
|
||||
void CheckSapperAttaching( void );
|
||||
|
||||
// IScorer
|
||||
public:
|
||||
// Return the entity that should receive the score
|
||||
virtual CBasePlayer *GetScorer( void );
|
||||
// Return the entity that should get assistance credit
|
||||
virtual CBasePlayer *GetAssistant( void );
|
||||
|
||||
public:
|
||||
// FIXME: Make these private
|
||||
|
||||
// Menu-related goodies
|
||||
CMenu *m_pCurrentMenu;
|
||||
char m_MenuStringBuffer[MENU_STRING_BUFFER_SIZE];
|
||||
int m_MenuSelectionBuffer;
|
||||
float m_MenuRefreshTime;
|
||||
float m_MenuUpdateTime;
|
||||
|
||||
bool m_bBuffHealthBoost;
|
||||
|
||||
// Object sapper placement handling
|
||||
float m_flSapperAttachmentFinishTime;
|
||||
float m_flSapperAttachmentStartTime;
|
||||
CHandle< CGrenadeObjectSapper > m_hSapper;
|
||||
CHandle< CBaseObject > m_hSappedObject;
|
||||
|
||||
private:
|
||||
// Medic Buffs
|
||||
void CheckBuffs( void );
|
||||
void RemoveHealthBoost( void );
|
||||
|
||||
// vehicles
|
||||
void OnVehicleStart();
|
||||
void OnVehicleEnd( Vector & );
|
||||
|
||||
bool IsInTacticalView( void ) const;
|
||||
|
||||
// Get rid of resource zone orders.
|
||||
void KillResourceZoneOrders();
|
||||
|
||||
// Knockdowns
|
||||
void ResetKnockdown( void );
|
||||
void CheckKnockdown( void );
|
||||
|
||||
// Gagging
|
||||
bool IsGagged( void );
|
||||
|
||||
void DropAllResourceChunks( void );
|
||||
|
||||
// Thinking
|
||||
void CheckCamouflage( void );
|
||||
|
||||
// Rampage
|
||||
bool IsInRampage( void );
|
||||
|
||||
// Vertification
|
||||
inline bool HasClass( void ) { return GetPlayerClass() != NULL; }
|
||||
|
||||
// Respawn stations
|
||||
CBaseEntity *GetInitialSpawnPoint( void );
|
||||
|
||||
// Go ragdoll, create shadow object, etc.
|
||||
bool BecomeRagdollOnClient( const Vector &force );
|
||||
// Remove ragdoll
|
||||
bool ClearClientRagdoll( bool moveplayertofinalspot );
|
||||
// Move origin in sync with shadow object if ragdolling
|
||||
void FollowClientRagdoll( void );
|
||||
bool CheckRagdollToStand( trace_t &trace );
|
||||
bool IsClientRagdoll() const { return m_hRagdollShadow.Get() != 0; }
|
||||
|
||||
// Deployed?
|
||||
bool IsDeployed() const { return m_bDeployed; }
|
||||
|
||||
|
||||
void StoreCycle( void );
|
||||
float RetrieveCycle( void );
|
||||
|
||||
bool ShouldMatchCycles( Activity newActivity, Activity currentActivity );
|
||||
|
||||
// TF Player Physics Shadow
|
||||
void InitVCollision( void );
|
||||
|
||||
void ApplyDamageForce( const CTakeDamageInfo &info, int nDamageToDo );
|
||||
|
||||
// Movement.
|
||||
Vector m_vecPosDelta;
|
||||
|
||||
enum { MOMENTUM_MAXSIZE = 10 };
|
||||
float m_aMomentum[MOMENTUM_MAXSIZE];
|
||||
int m_iMomentumHead;
|
||||
|
||||
// Spawn spot
|
||||
CNetworkHandle( CBaseEntity, m_hSpawnPoint );
|
||||
|
||||
// This player's TF2 specific data that should only be replicated to
|
||||
// the player and not to other players.
|
||||
CNetworkVarEmbedded( CTFPlayerLocalData, m_TFLocal );
|
||||
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_iMaxHealth ); // Make sure this ent is marked as changed when m_iMaxHealth changes.
|
||||
|
||||
CHandle< CWeaponBuilder > m_hWeaponBuilder;
|
||||
CHandle< CWeaponCombatShield > m_hWeaponCombatShield;
|
||||
float m_flKnockdownEndTime;
|
||||
|
||||
// Weapon used before switching to an object placement
|
||||
CHandle<CBaseCombatWeapon> m_hLastWeaponBeforeObject;
|
||||
|
||||
CNetworkQAngle( m_vecDeployedAngles );
|
||||
|
||||
// Tracks when medics are boosting the damage this guy applies.
|
||||
int m_nMedicDamageBoosts;
|
||||
|
||||
CNetworkVar( int, m_TFPlayerFlags ); // Combination of TF_PLAYER_ flags.
|
||||
|
||||
bool m_bCantMove;
|
||||
|
||||
bool m_bGagged;
|
||||
|
||||
bool m_bFirstTeamSpawn; // When true, the player's joined the server but not picked a team for the first time
|
||||
|
||||
float m_flLastAttackTime;
|
||||
|
||||
// Camouflage
|
||||
CNetworkVar( float, m_flCamouflageAmount );
|
||||
|
||||
// Camouflage state machine
|
||||
float m_flGoalCamouflageAmount;
|
||||
float m_flGoalCamouflageChangeRate;
|
||||
|
||||
// State information
|
||||
bool m_bSwitchingView;
|
||||
|
||||
// Zone the player's currently in
|
||||
CControlZone *m_pCurrentZone;
|
||||
CNetworkVar( int, m_iCurrentZoneState );
|
||||
|
||||
// Accuracy
|
||||
bool m_bSnapAccuracy;
|
||||
float m_flAccuracy;
|
||||
float m_flTargetAccuracy;
|
||||
float m_flLastRicochetNearby;
|
||||
float m_flNumberOfRicochets;
|
||||
float m_flLastExplosionNearby;
|
||||
|
||||
// Buff states
|
||||
int m_iHealthBoostTarget;
|
||||
float m_flHealthBoostDecrement;
|
||||
float m_flHealthBoostTime;
|
||||
|
||||
EHANDLE m_hNextPlayerToUpdateOnRadar;
|
||||
|
||||
CNetworkHandle( CBaseEntity, m_hSelectedMCV );
|
||||
|
||||
// Orders
|
||||
CHandle< COrder > m_hSelectedOrder;
|
||||
|
||||
// Tech spending vote preference
|
||||
int m_nPreferredTechnology;
|
||||
|
||||
// The last time we were damaged by an enemy.
|
||||
double m_flLastTimeDamagedByEnemy;
|
||||
|
||||
// Menu Handling
|
||||
float m_MenuDisplayTime;
|
||||
|
||||
// Rampage
|
||||
bool m_bRampage; // Do I get adrenalin extension for killing enemies?
|
||||
|
||||
// Handheld shield
|
||||
CNetworkVar( bool, m_bIsBlocking );
|
||||
bool m_bIsParrying;
|
||||
|
||||
float m_flTimeOfDeath;
|
||||
|
||||
EHANDLE m_hLastBoostEntity; // Last entity that gave me a power boost
|
||||
|
||||
// Deployment
|
||||
CNetworkVar( bool, m_bDeployed );
|
||||
CNetworkVar( bool, m_bDeploying );
|
||||
CNetworkVar( bool, m_bUnDeploying );
|
||||
float m_flFinishedDeploying;
|
||||
|
||||
CNetworkVar( int, m_iPlayerClass );
|
||||
CAllPlayerClasses m_PlayerClasses;
|
||||
|
||||
// This times how long each class is active.
|
||||
CFastTimer m_Timer;
|
||||
|
||||
tfplayertech_t m_rgClientTechAvail[ MAX_TECHNOLOGIES ];
|
||||
|
||||
CHandle< CRagdollShadow > m_hRagdollShadow;
|
||||
Vector m_vecLastGoodRagdollPos;
|
||||
|
||||
// Last reinforcment second counter for player ( so we don't spam the player
|
||||
// with text every frame )
|
||||
int m_iLastSecondsToGo;
|
||||
|
||||
CPlayerAnimState m_PlayerAnimState;
|
||||
|
||||
// Fractional boost amount
|
||||
float m_flFractionalBoost;
|
||||
|
||||
float m_flStoredCycle;
|
||||
|
||||
|
||||
// Are we under attack?
|
||||
CNetworkVar( bool, m_bUnderAttack );
|
||||
|
||||
friend void* SendProxy_RideVehicle( const void *pStruct, const void *pData, CSendProxyRecipients *pRecipients, int objectID );
|
||||
friend class CTFPlayerMove;
|
||||
};
|
||||
|
||||
inline CBaseTFPlayer *ToBaseTFPlayer( CBaseEntity *pEntity )
|
||||
{
|
||||
if ( !pEntity || !pEntity->IsPlayer() )
|
||||
return NULL;
|
||||
|
||||
return dynamic_cast<CBaseTFPlayer *>( pEntity );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
class CPhysicsPlayerCallback : public IPhysicsPlayerControllerEvent
|
||||
{
|
||||
public:
|
||||
|
||||
int ShouldMoveTo( IPhysicsObject *pObject, const Vector &position )
|
||||
{
|
||||
CBaseTFPlayer *pPlayer = ( CBaseTFPlayer* )pObject->GetGameData();
|
||||
if ( pPlayer->TouchedPhysics() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
|
||||
extern CPhysicsPlayerCallback playerCallback;
|
||||
|
||||
#endif // TF_PLAYER_H
|
||||
Reference in New Issue
Block a user