Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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
|