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.
176 lines
5.3 KiB
176 lines
5.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
// |
|
//=============================================================================// |
|
#ifndef HL2MP_PLAYER_H |
|
#define HL2MP_PLAYER_H |
|
#pragma once |
|
|
|
class CHL2MP_Player; |
|
|
|
#include "basemultiplayerplayer.h" |
|
#include "hl2_playerlocaldata.h" |
|
#include "hl2_player.h" |
|
#include "simtimer.h" |
|
#include "soundenvelope.h" |
|
#include "hl2mp_player_shared.h" |
|
#include "hl2mp_gamerules.h" |
|
#include "utldict.h" |
|
|
|
//============================================================================= |
|
// >> HL2MP_Player |
|
//============================================================================= |
|
class CHL2MPPlayerStateInfo |
|
{ |
|
public: |
|
HL2MPPlayerState m_iPlayerState; |
|
const char *m_pStateName; |
|
|
|
void (CHL2MP_Player::*pfnEnterState)(); // Init and deinit the state. |
|
void (CHL2MP_Player::*pfnLeaveState)(); |
|
|
|
void (CHL2MP_Player::*pfnPreThink)(); // Do a PreThink() in this state. |
|
}; |
|
|
|
class CHL2MP_Player : public CHL2_Player |
|
{ |
|
public: |
|
DECLARE_CLASS( CHL2MP_Player, CHL2_Player ); |
|
|
|
CHL2MP_Player(); |
|
~CHL2MP_Player( void ); |
|
|
|
static CHL2MP_Player *CreatePlayer( const char *className, edict_t *ed ) |
|
{ |
|
CHL2MP_Player::s_PlayerEdict = ed; |
|
return (CHL2MP_Player*)CreateEntityByName( className ); |
|
} |
|
|
|
DECLARE_SERVERCLASS(); |
|
DECLARE_DATADESC(); |
|
|
|
virtual void Precache( void ); |
|
virtual void Spawn( void ); |
|
virtual void PostThink( void ); |
|
virtual void PreThink( void ); |
|
virtual void PlayerDeathThink( void ); |
|
virtual void SetAnimation( PLAYER_ANIM playerAnim ); |
|
virtual bool HandleCommand_JoinTeam( int team ); |
|
virtual bool ClientCommand( const CCommand &args ); |
|
virtual void CreateViewModel( int viewmodelindex = 0 ); |
|
virtual bool BecomeRagdollOnClient( const Vector &force ); |
|
virtual void Event_Killed( const CTakeDamageInfo &info ); |
|
virtual int OnTakeDamage( const CTakeDamageInfo &inputInfo ); |
|
virtual bool WantsLagCompensationOnEntity( const CBasePlayer *pPlayer, const CUserCmd *pCmd, const CBitVec<MAX_EDICTS> *pEntityTransmitBits ) const; |
|
virtual void FireBullets ( const FireBulletsInfo_t &info ); |
|
virtual bool Weapon_Switch( CBaseCombatWeapon *pWeapon, int viewmodelindex = 0); |
|
virtual bool BumpWeapon( CBaseCombatWeapon *pWeapon ); |
|
virtual void ChangeTeam( int iTeam ); |
|
virtual void PickupObject ( CBaseEntity *pObject, bool bLimitMassAndSize ); |
|
virtual void PlayStepSound( Vector &vecOrigin, surfacedata_t *psurface, float fvol, bool force ); |
|
virtual void Weapon_Drop( CBaseCombatWeapon *pWeapon, const Vector *pvecTarget = NULL, const Vector *pVelocity = NULL ); |
|
virtual void UpdateOnRemove( void ); |
|
virtual void DeathSound( const CTakeDamageInfo &info ); |
|
virtual CBaseEntity* EntSelectSpawnPoint( void ); |
|
|
|
int FlashlightIsOn( void ); |
|
void FlashlightTurnOn( void ); |
|
void FlashlightTurnOff( void ); |
|
void PrecacheFootStepSounds( void ); |
|
bool ValidatePlayerModel( const char *pModel ); |
|
|
|
QAngle GetAnimEyeAngles( void ) { return m_angEyeAngles.Get(); } |
|
|
|
Vector GetAttackSpread( CBaseCombatWeapon *pWeapon, CBaseEntity *pTarget = NULL ); |
|
|
|
void CheatImpulseCommands( int iImpulse ); |
|
void CreateRagdollEntity( void ); |
|
void GiveAllItems( void ); |
|
void GiveDefaultItems( void ); |
|
|
|
void NoteWeaponFired( void ); |
|
|
|
void ResetAnimation( void ); |
|
void SetPlayerModel( void ); |
|
void SetPlayerTeamModel( void ); |
|
Activity TranslateTeamActivity( Activity ActToTranslate ); |
|
|
|
float GetNextModelChangeTime( void ) { return m_flNextModelChangeTime; } |
|
float GetNextTeamChangeTime( void ) { return m_flNextTeamChangeTime; } |
|
void PickDefaultSpawnTeam( void ); |
|
void SetupPlayerSoundsByModel( const char *pModelName ); |
|
const char *GetPlayerModelSoundPrefix( void ); |
|
int GetPlayerModelType( void ) { return m_iPlayerSoundType; } |
|
|
|
void DetonateTripmines( void ); |
|
|
|
void Reset(); |
|
|
|
bool IsReady(); |
|
void SetReady( bool bReady ); |
|
|
|
void CheckChatText( char *p, int bufsize ); |
|
|
|
void State_Transition( HL2MPPlayerState newState ); |
|
void State_Enter( HL2MPPlayerState newState ); |
|
void State_Leave(); |
|
void State_PreThink(); |
|
CHL2MPPlayerStateInfo *State_LookupInfo( HL2MPPlayerState state ); |
|
|
|
void State_Enter_ACTIVE(); |
|
void State_PreThink_ACTIVE(); |
|
void State_Enter_OBSERVER_MODE(); |
|
void State_PreThink_OBSERVER_MODE(); |
|
|
|
|
|
virtual bool StartObserverMode( int mode ); |
|
virtual void StopObserverMode( void ); |
|
|
|
|
|
Vector m_vecTotalBulletForce; //Accumulator for bullet force in a single frame |
|
|
|
// Tracks our ragdoll entity. |
|
CNetworkHandle( CBaseEntity, m_hRagdoll ); // networked entity handle |
|
|
|
virtual bool CanHearAndReadChatFrom( CBasePlayer *pPlayer ); |
|
|
|
|
|
private: |
|
|
|
CNetworkQAngle( m_angEyeAngles ); |
|
CPlayerAnimState m_PlayerAnimState; |
|
|
|
int m_iLastWeaponFireUsercmd; |
|
int m_iModelType; |
|
CNetworkVar( int, m_iSpawnInterpCounter ); |
|
CNetworkVar( int, m_iPlayerSoundType ); |
|
|
|
float m_flNextModelChangeTime; |
|
float m_flNextTeamChangeTime; |
|
|
|
float m_flSlamProtectTime; |
|
|
|
HL2MPPlayerState m_iPlayerState; |
|
CHL2MPPlayerStateInfo *m_pCurStateInfo; |
|
|
|
bool ShouldRunRateLimitedCommand( const CCommand &args ); |
|
|
|
// This lets us rate limit the commands the players can execute so they don't overflow things like reliable buffers. |
|
CUtlDict<float,int> m_RateLimitLastCommandTimes; |
|
|
|
bool m_bEnterObserver; |
|
bool m_bReady; |
|
}; |
|
|
|
inline CHL2MP_Player *ToHL2MPPlayer( CBaseEntity *pEntity ) |
|
{ |
|
if ( !pEntity || !pEntity->IsPlayer() ) |
|
return NULL; |
|
|
|
return dynamic_cast<CHL2MP_Player*>( pEntity ); |
|
} |
|
|
|
#endif //HL2MP_PLAYER_H
|
|
|