//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ // //=============================================================================// #ifndef HL1MP_PLAYER_H #define HL1MP_PLAYER_H #pragma once #include "cbase.h" #include "hl1_c_player.h" #include "hl1_player_shared.h" class C_HL1MP_Player : public C_HL1_Player { public: DECLARE_CLASS( C_HL1MP_Player, C_HL1_Player ); DECLARE_CLIENTCLASS(); DECLARE_PREDICTABLE(); DECLARE_INTERPOLATION(); C_HL1MP_Player( void ); ~C_HL1MP_Player(); virtual const QAngle& GetRenderAngles(); virtual void UpdateClientSideAnimation(); virtual void ProcessMuzzleFlashEvent(); void DoAnimationEvent( PlayerAnimEvent_t event, int nData = 0 ); virtual bool ShouldPredict( void ); virtual void CalcView( Vector &eyeOrigin, QAngle &eyeAngles, float &zNear, float &zFar, float &fov ); IRagdoll* GetRepresentativeRagdoll() const; virtual void Spawn( void ); virtual void AddEntity( void ); virtual bool ShouldDraw( void ); virtual void OnDataChanged( DataUpdateType_t type ); virtual void PostDataUpdate( DataUpdateType_t updateType ); virtual void ClientThink( void ); virtual C_BaseAnimating *BecomeRagdollOnClient(); //QAngle GetAnimEyeAngles( void ) { return m_angEyeAngles; } const QAngle& EyeAngles( void ) { if ( IsLocalPlayer() ) { return BaseClass::EyeAngles(); } else { return m_angEyeAngles; } } virtual ShadowType_t ShadowCastType() { if ( !IsVisible() ) return SHADOWS_NONE; return SHADOWS_RENDER_TO_TEXTURE_DYNAMIC; } void PreThink( void ); int m_iRealSequence; private: C_HL1MP_Player( const C_HL1MP_Player & ); EHANDLE m_hRagdoll; QAngle m_angEyeAngles; CInterpolatedVar< QAngle > m_iv_angEyeAngles; IHL1MPPlayerAnimState* m_PlayerAnimState; int m_iSpawnInterpCounter; int m_iSpawnInterpCounterCache; float m_fLastPredFreeze; }; class C_HL1MPRagdoll : public C_BaseAnimatingOverlay { public: DECLARE_CLASS( C_HL1MPRagdoll, C_BaseAnimatingOverlay ); DECLARE_CLIENTCLASS(); C_HL1MPRagdoll(); ~C_HL1MPRagdoll(); virtual void OnDataChanged( DataUpdateType_t type ); int GetPlayerEntIndex() const; IRagdoll* GetIRagdoll() const; void ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName ); void UpdateOnRemove( void ); virtual void SetupWeights( const matrix3x4_t *pBoneToWorld, int nFlexWeightCount, float *pFlexWeights, float *pFlexDelayedWeights ); private: C_HL1MPRagdoll( const C_HL1MPRagdoll & ) {} void Interp_Copy( C_BaseAnimatingOverlay *pSourceEntity ); void CreateHL1MPRagdoll( void ); private: EHANDLE m_hPlayer; CNetworkVector( m_vecRagdollVelocity ); CNetworkVector( m_vecRagdollOrigin ); }; inline C_HL1MP_Player *ToHL1MPPlayer( CBaseEntity *pEntity ) { if ( !pEntity || !pEntity->IsPlayer() ) return NULL; return dynamic_cast( pEntity ); } #endif