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.
124 lines
3.0 KiB
124 lines
3.0 KiB
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: Client side CHostage class
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef C_CHOSTAGE_H
|
||
|
#define C_CHOSTAGE_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "c_ai_basenpc.h"
|
||
|
#include "utlvector.h"
|
||
|
#include "util_shared.h"
|
||
|
#include "cs_playeranimstate.h"
|
||
|
#include "c_cs_player.h"
|
||
|
|
||
|
|
||
|
// for shared code
|
||
|
#define CHostage C_CHostage
|
||
|
|
||
|
|
||
|
//----------------------------------------------------------------------------------------------
|
||
|
/**
|
||
|
* The client-side implementation of the Hostage
|
||
|
*/
|
||
|
class C_CHostage : public C_BaseCombatCharacter, public ICSPlayerAnimStateHelpers
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS( C_CHostage, C_BaseCombatCharacter );
|
||
|
DECLARE_CLIENTCLASS();
|
||
|
|
||
|
C_CHostage();
|
||
|
virtual ~C_CHostage();
|
||
|
|
||
|
// ICSPlayerAnimState overrides.
|
||
|
public:
|
||
|
virtual CWeaponCSBase* CSAnim_GetActiveWeapon();
|
||
|
virtual bool CSAnim_CanMove();
|
||
|
|
||
|
public:
|
||
|
virtual void Spawn( void );
|
||
|
virtual void UpdateClientSideAnimation();
|
||
|
|
||
|
void OnPreDataChanged( DataUpdateType_t updateType );
|
||
|
void OnDataChanged( DataUpdateType_t updateType );
|
||
|
|
||
|
bool IsRescued( void ) { return m_isRescued; }
|
||
|
bool WasRecentlyKilledOrRescued( void );
|
||
|
|
||
|
int GetHealth( void ) const { return m_iHealth; }
|
||
|
int GetMaxHealth( void ) const { return m_iMaxHealth; }
|
||
|
|
||
|
virtual void ClientThink( void );
|
||
|
|
||
|
C_CSPlayer *GetLeader( void ) const; // return who we are following or NULL
|
||
|
|
||
|
virtual C_BaseAnimating * BecomeRagdollOnClient();
|
||
|
virtual bool ShouldDraw( void );
|
||
|
|
||
|
void ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName );
|
||
|
private:
|
||
|
int m_OldLifestate;
|
||
|
int m_iMaxHealth;
|
||
|
|
||
|
ICSPlayerAnimState *m_PlayerAnimState;
|
||
|
|
||
|
CNetworkVar( EHANDLE, m_leader ); // who we are following, or NULL
|
||
|
|
||
|
CNetworkVar( bool, m_isRescued );
|
||
|
float m_flDeadOrRescuedTime;
|
||
|
static void RecvProxy_Rescued( const CRecvProxyData *pData, void *pStruct, void *pOut );
|
||
|
|
||
|
CountdownTimer m_blinkTimer;
|
||
|
|
||
|
Vector m_lookAt; // point in space we are looking at
|
||
|
void UpdateLookAt( CStudioHdr *pStudioHdr ); // orient head and eyes towards m_lookAt
|
||
|
void LookAround( void ); // look around at various interesting things
|
||
|
CountdownTimer m_lookAroundTimer;
|
||
|
|
||
|
bool m_isInit;
|
||
|
void Initialize( void ); // set up attachment and pose param indices
|
||
|
|
||
|
int m_eyeAttachment;
|
||
|
int m_chestAttachment;
|
||
|
|
||
|
int m_bodyYawPoseParam;
|
||
|
float m_bodyYawMin;
|
||
|
float m_bodyYawMax;
|
||
|
|
||
|
int m_headYawPoseParam;
|
||
|
float m_headYawMin;
|
||
|
float m_headYawMax;
|
||
|
float m_flCurrentHeadYaw;
|
||
|
float m_flLastBodyYaw;
|
||
|
|
||
|
int m_headPitchPoseParam;
|
||
|
float m_headPitchMin;
|
||
|
float m_headPitchMax;
|
||
|
float m_flCurrentHeadPitch;
|
||
|
|
||
|
int m_seq;
|
||
|
|
||
|
bool m_createdLowViolenceRagdoll;
|
||
|
|
||
|
private:
|
||
|
C_CHostage( const C_CHostage & ); // not defined, not accessible
|
||
|
};
|
||
|
|
||
|
|
||
|
inline C_CSPlayer *C_CHostage::GetLeader( void ) const
|
||
|
{
|
||
|
return ToCSPlayer( m_leader.m_Value );
|
||
|
}
|
||
|
|
||
|
|
||
|
extern CUtlVector< C_CHostage* > g_Hostages;
|
||
|
extern CUtlVector< EHANDLE > g_HostageRagdolls;
|
||
|
|
||
|
|
||
|
#endif // C_CHOSTAGE_H
|