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.
254 lines
6.3 KiB
254 lines
6.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Player for HL1. |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef TFC_PLAYER_H |
|
#define TFC_PLAYER_H |
|
#pragma once |
|
|
|
|
|
#include "player.h" |
|
#include "server_class.h" |
|
#include "tfc_playeranimstate.h" |
|
#include "tfc_shareddefs.h" |
|
#include "tfc_player_shared.h" |
|
|
|
|
|
class CTFCPlayer; |
|
class CTFGoal; |
|
class CTFGoalItem; |
|
|
|
|
|
// Function table for each player state. |
|
class CPlayerStateInfo |
|
{ |
|
public: |
|
TFCPlayerState m_iPlayerState; |
|
const char *m_pStateName; |
|
|
|
void (CTFCPlayer::*pfnEnterState)(); // Init and deinit the state. |
|
void (CTFCPlayer::*pfnLeaveState)(); |
|
|
|
void (CTFCPlayer::*pfnThink)(); // Called every frame. |
|
}; |
|
|
|
|
|
//============================================================================= |
|
// >> CounterStrike player |
|
//============================================================================= |
|
class CTFCPlayer : public CBasePlayer |
|
{ |
|
public: |
|
DECLARE_CLASS( CTFCPlayer, CBasePlayer ); |
|
DECLARE_SERVERCLASS(); |
|
|
|
|
|
CTFCPlayer(); |
|
~CTFCPlayer(); |
|
|
|
static CTFCPlayer *CreatePlayer( const char *className, edict_t *ed ); |
|
static CTFCPlayer* Instance( int iEnt ); |
|
|
|
// This passes the event to the client's and server's CPlayerAnimState. |
|
void DoAnimationEvent( PlayerAnimEvent_t event ); |
|
|
|
virtual void PostThink(); |
|
virtual void InitialSpawn(); |
|
virtual void Spawn(); |
|
virtual void Precache(); |
|
virtual bool ClientCommand( const CCommand &args ); |
|
virtual void ChangeTeam( int iTeamNum ) OVERRIDE; |
|
virtual int TakeHealth( float flHealth, int bitsDamageType ); |
|
virtual void Event_Killed( const CTakeDamageInfo &info ); |
|
|
|
void ClientHearVox( const char *pSentence ); |
|
void DisplayLocalItemStatus( CTFGoal *pGoal ); |
|
|
|
|
|
public: |
|
|
|
// Is this entity an ally (on our team)? |
|
bool IsAlly( CBaseEntity *pEnt ) const; |
|
|
|
TFCPlayerState State_Get() const; // Get the current state. |
|
|
|
void TF_AddFrags( int nFrags ); |
|
|
|
void ResetMenu(); |
|
|
|
// On fire.. |
|
int GetNumFlames() const; |
|
void SetNumFlames( int nFlames ); |
|
|
|
void ForceRespawn(); |
|
|
|
void TeamFortress_SetSpeed(); |
|
void TeamFortress_CheckClassStats(); |
|
void TeamFortress_SetSkin(); |
|
void TeamFortress_RemoveLiveGrenades(); |
|
void TeamFortress_RemoveRockets(); |
|
void TeamFortress_DetpackStop( void ); |
|
|
|
BOOL TeamFortress_RemoveDetpacks( void ); |
|
void RemovePipebombs( void ); |
|
void RemoveOwnedEnt( char *pEntName ); |
|
|
|
// SPY STUFF |
|
public: |
|
|
|
void Spy_RemoveDisguise(); |
|
void TeamFortress_SpyCalcName(); |
|
void Spy_ResetExternalWeaponModel( void ); |
|
|
|
|
|
// ENGINEER STUFF |
|
public: |
|
|
|
void Engineer_RemoveBuildings(); |
|
|
|
// Building |
|
BOOL is_building; // TRUE for an ENGINEER if they're building something |
|
EHANDLE building; // The building the ENGINEER is using |
|
float building_wait; // Used to prevent using a building again immediately |
|
EHANDLE real_owner; |
|
float has_dispenser; // TRUE if engineer has a dispenser |
|
float has_sentry; // TRUE if engineer has a sentry |
|
float has_entry_teleporter; // TRUE if engineer has an entry teleporter |
|
float has_exit_teleporter; // TRUE if engineer has an exit teleporter |
|
|
|
|
|
// DEMO STUFF |
|
public: |
|
|
|
int m_iPipebombCount; |
|
|
|
|
|
public: |
|
|
|
// Get the class info associated with us. |
|
const CTFCPlayerClassInfo* GetClassInfo() const; |
|
|
|
// Helpers to ease porting... |
|
int tp_grenades_1() const { return GetClassInfo()->m_iGrenadeType1; } |
|
int tp_grenades_2() const { return GetClassInfo()->m_iGrenadeType2; } |
|
int no_grenades_1() const { return GetAmmoCount( TFC_AMMO_GRENADES1 ); } |
|
int no_grenades_2() const { return GetAmmoCount( TFC_AMMO_GRENADES2 ); } |
|
|
|
|
|
public: |
|
|
|
CTFCPlayerShared m_Shared; |
|
|
|
int item_list; // Used to keep track of which goalitems are |
|
// affecting the player at any time. |
|
// GoalItems use it to keep track of their own |
|
// mask to apply to a player's item_list |
|
|
|
float armortype; |
|
//float armorvalue; // Use CBasePlayer::m_ArmorValue. |
|
int armorclass; // Type of armor being worn |
|
float armor_allowed; |
|
|
|
float invincible_finished; |
|
float invisible_finished; |
|
float super_damage_finished; |
|
float radsuit_finished; |
|
|
|
int lives; // The number of lives you have left |
|
int is_unableto_spy_or_teleport; |
|
|
|
BOOL bRemoveGrenade; // removes the primed grenade if set |
|
|
|
// Replacement_Model Stuff |
|
string_t replacement_model; |
|
int replacement_model_body; |
|
int replacement_model_skin; |
|
int replacement_model_flags; |
|
|
|
// Spy |
|
int undercover_team; // The team the Spy is pretending to be in |
|
int undercover_skin; // The skin the Spy is pretending to have |
|
EHANDLE undercover_target; // The player the Spy is pretending to be |
|
BOOL is_feigning; // TRUE for a SPY if they're feigning death |
|
float immune_to_check; |
|
BOOL is_undercover; // TRUE for a SPY if they're undercover |
|
|
|
// TEAMFORTRESS VARIABLES |
|
int no_sentry_message; |
|
int no_dispenser_message; |
|
|
|
// teleporter variables |
|
int no_entry_teleporter_message; |
|
int no_exit_teleporter_message; |
|
|
|
BOOL is_detpacking; // TRUE for a DEMOMAN if they're setting a detpack |
|
|
|
float current_menu; // is set to the number of the current menu, is 0 if they are not in a menu |
|
|
|
// State management. |
|
private: |
|
|
|
void State_Transition( TFCPlayerState newState ); |
|
void State_Enter( TFCPlayerState newState ); |
|
void State_Leave(); |
|
CPlayerStateInfo* State_LookupInfo( TFCPlayerState state ); |
|
|
|
CPlayerStateInfo *m_pCurStateInfo; |
|
|
|
void State_Enter_WELCOME(); |
|
void State_Enter_PICKINGTEAM(); |
|
void State_Enter_PICKINGCLASS(); |
|
void State_Enter_ACTIVE(); |
|
void State_Enter_OBSERVER_MODE(); |
|
void State_Enter_DYING(); |
|
|
|
|
|
private: |
|
|
|
friend void Bot_Think( CTFCPlayer *pBot ); |
|
void HandleCommand_JoinTeam( const char *pTeamName ); |
|
void HandleCommand_JoinClass( const char *pClassName ); |
|
|
|
void GiveDefaultItems(); |
|
|
|
void TFCPlayerThink(); |
|
|
|
void PhysObjectSleep(); |
|
void PhysObjectWake(); |
|
|
|
void GetIntoGame(); |
|
|
|
|
|
private: |
|
|
|
// Copyed from EyeAngles() so we can send it to the client. |
|
CNetworkQAngle( m_angEyeAngles ); |
|
|
|
ITFCPlayerAnimState *m_PlayerAnimState; |
|
|
|
int m_iLegDamage; |
|
}; |
|
|
|
|
|
inline CTFCPlayer *ToTFCPlayer( CBaseEntity *pEntity ) |
|
{ |
|
if ( !pEntity || !pEntity->IsPlayer() ) |
|
return NULL; |
|
|
|
#ifdef _DEBUG |
|
Assert( dynamic_cast<CTFCPlayer*>( pEntity ) != 0 ); |
|
#endif |
|
return static_cast< CTFCPlayer* >( pEntity ); |
|
} |
|
|
|
|
|
inline const CTFCPlayerClassInfo* CTFCPlayer::GetClassInfo() const |
|
{ |
|
return GetTFCClassInfo( m_Shared.GetPlayerClass() ); |
|
} |
|
|
|
|
|
#endif // TFC_PLAYER_H
|
|
|