diff options
Diffstat (limited to 'game/server/tf2/tf_playerclass.h')
| -rw-r--r-- | game/server/tf2/tf_playerclass.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/game/server/tf2/tf_playerclass.h b/game/server/tf2/tf_playerclass.h new file mode 100644 index 0000000..873cb8c --- /dev/null +++ b/game/server/tf2/tf_playerclass.h @@ -0,0 +1,214 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#ifndef TF_PLAYERCLASS_H +#define TF_PLAYERCLASS_H + +#ifdef _WIN32 +#pragma once +#endif + + +#include "tier0/fasttimer.h" +#include <crtdbg.h> + +class CPlayerClassData; +class CPlayerClass; +class CBaseTFPlayer; +class COrder; +class CBaseObject; +class CBaseTechnology; +class CWeaponCombatShield; + + +enum ResupplyReason_t +{ + RESUPPLY_RESPAWN = 0, + RESUPPLY_ALL_FROM_STATION, + RESUPPLY_AMMO_FROM_STATION, + RESUPPLY_GRENADES_FROM_STATION, +}; + + +//============================================================================== +// PLAYER CLASSES +//============================================================================== + +class CBaseTFPlayer; +class CTFTeam; + +// Base PlayerClass +// The PlayerClass classes handle all class specific weaponry / abilities / etc +class CPlayerClass +{ +public: + DECLARE_CLASS_NOBASE( CPlayerClass ); + CPlayerClass( CBaseTFPlayer *pPlayer, TFClass iClass ); + virtual ~CPlayerClass(); + + // Any objects created/owned by class should be allocated and destroyed here + virtual void ClassActivate( void ); + virtual void ClassDeactivate( void ); + + // Class initialization + virtual void CreateClass( void ); // Create the class upon initial spawn + virtual void RespawnClass( void ); // Called upon all respawns + virtual bool ResupplyAmmo( float flPercentage, ResupplyReason_t reason ); // Reset the ammo counts + virtual bool ResupplyAmmoType( float flAmount, const char *pAmmoType ); // Purpose: Supply the player with Ammo. Return true if some ammo was given. + + virtual void SetMaxHealth( float flMaxHealth ); // Set the player's max health + int GetMaxHealthCVarValue(); // Return the player class's max health cvar + + virtual float GetMaxSpeed( void ); // Calculate and return the player's max speed + virtual float GetMaxWalkSpeed( void ); // Calculate and return the player's max walking speed + virtual void SetMaxSpeed( float flMaxSpeed ); // Set the player's max speed + + virtual string_t GetClassModel( int nTeam ); // Return a string containing this class's model + virtual const char* GetClassModelString( int nTeam ); + + virtual void SetupMoveData( void ); // Setup the default player movement data. + virtual void SetupSizeData( void ); + + virtual bool CanSeePlayerOnRadar( CBaseTFPlayer *pl ); + virtual void ItemPostFrame( void ); + virtual bool ClientCommand( const CCommand &args ); + + // Class abilities + virtual void ClassThink( void ); + virtual void GainedNewTechnology( CBaseTechnology *pTechnology ); // New technology has been gained + + // Deployment + virtual float GetDeployTime( void ) { return 0.0; }; + + // Resources + virtual int ClassCostAdjustment( ResupplyBuyType_t nType ) { return 0; } + + // Objects + int GetNumObjects( int iObjectType ); + virtual int CanBuild( int iObjectType ); + virtual int StartedBuildingObject( int iObjectType ); + virtual void StoppedBuilding( int iObjectType ); + virtual void FinishedObject( CBaseObject *pObject ); + virtual void PickupObject( CBaseObject *pObject ); + virtual void OwnedObjectDestroyed( CBaseObject *pObject ); + virtual void OwnedObjectChangeToTeam( CBaseObject *pObject, CBaseTFPlayer *pNewOwner ); + virtual void OwnedObjectChangeFromTeam( CBaseObject *pObject, CBaseTFPlayer *pOldOwner ); + virtual void CheckDeterioratingObjects( void ); + + // Hooks + virtual float OnTakeDamage( const CTakeDamageInfo &info ); + virtual bool ShouldApplyDamageForce( const CTakeDamageInfo &info ); + + // Vehicles + virtual void OnVehicleStart() {} + virtual void OnVehicleEnd() {} + virtual bool CanGetInVehicle( void ) { return true; } + + virtual void PlayerDied( CBaseEntity *pAttacker ); + virtual void PlayerKilledPlayer( CBaseTFPlayer *pVictim ); + + virtual void SetPlayerHull( void ); + virtual void GetPlayerHull( bool bDucking, Vector &vecMin, Vector &vecMax ); + + // Player Physics Shadow + virtual void InitVCollision( void ); + + // Powerups + virtual void PowerupStart( int iPowerup, float flAmount, CBaseEntity *pAttacker, CDamageModifier *pDamageModifier ); + virtual void PowerupEnd( int iPowerup ); + + // Camo + virtual void ClearCamouflage( void ) { return; }; + + // Disguise + virtual void FinishedDisguising( void ) { return; }; + virtual void StopDisguising( void ) { return; }; + + // Orders + virtual void CreatePersonalOrder( void ); + + // Create a high-priority order. This should be called by all player classes before + // they try to create class-specific orders. This function returns true if an order is + // created. + bool CreateInitialOrder(); + + bool AnyResourceZoneOrders(); + bool AnyNonResourceZoneOrders(); // Returns true if there are any non-resource-zone orders. + // If there are, then no class should make any overriding orders. + + // Respawn ( allow classes to override spawn points ) + virtual CBaseEntity *SelectSpawnPoint( void ); + + void *operator new( size_t stAllocateBlock ) + { + Assert( stAllocateBlock != 0 ); + void *pMem = malloc( stAllocateBlock ); + memset( pMem, 0, stAllocateBlock ); + return pMem; + } + + void* operator new( size_t stAllocateBlock, int nBlockUse, const char *pFileName, int nLine ) + { + Assert( stAllocateBlock != 0 ); + void *pMem = _malloc_dbg( stAllocateBlock, nBlockUse, pFileName, nLine ); + memset( pMem, 0, stAllocateBlock ); + return pMem; + } + + void operator delete( void *pMem ) + { + free( pMem ); + } + + void SetClassModel( string_t sModelName, int nTeam ) { m_sClassModel[nTeam] = sModelName; } + + // Weapon & Tech Associations + void AddWeaponTechAssoc( char *pWeaponTech ); + + + // Accessors. + inline CBaseTFPlayer* GetPlayer() { return m_pPlayer; } + CTFTeam* GetTeam(); + + virtual void ResetViewOffset( void ); + + virtual TFClass GetTFClass( void ); + + void AddWeaponTechAssociations( void ); + + // For CNetworkVar support. Chain to the player entity. + void NetworkStateChanged(); + + TFClass m_TFClass; + +protected: + double m_flNormalizedEngagementNextTime; + + CBaseTFPlayer *m_pPlayer; // Reference to the player + + float m_flMaxWalkingSpeed; + + string_t m_sClassModel[ MAX_TF_TEAMS + 1 ]; + + // Weapon & Tech associations + // Used to give out all weapons the player currently has the technologies for. + struct WeaponTechAssociation_t + { + char *pWeaponTech; + }; + WeaponTechAssociation_t m_WeaponTechAssociations[ MAX_WEAPONS ]; + int m_iNumWeaponTechAssociations; + + CHandle<CWeaponCombatShield> m_hWpnShield; +private: + void ClearAllWeaponTechAssoc( void ); + +private: + bool m_bTechAssociationsSet; +}; + +#endif // TF_PLAYERCLASS_H
\ No newline at end of file |