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.
137 lines
4.3 KiB
137 lines
4.3 KiB
#ifndef _INCLUDED_ASW_ZOMBIE_H |
|
#define _INCLUDED_ASW_ZOMBIE_H |
|
|
|
#include "iasw_spawnable_npc.h" |
|
#include "npc_BaseZombie.h" |
|
|
|
class CSprite; |
|
|
|
class CASW_Zombie : public CAI_BlendingHost<CNPC_BaseZombie>, public IASW_Spawnable_NPC |
|
{ |
|
DECLARE_DATADESC(); |
|
DECLARE_CLASS( CASW_Zombie, CAI_BlendingHost<CNPC_BaseZombie> ); |
|
DECLARE_SERVERCLASS(); |
|
|
|
public: |
|
CASW_Zombie() |
|
: m_DurationDoorBash( 2, 6), |
|
m_NextTimeToStartDoorBash( 3.0 ), |
|
m_bHoldoutAlien( false ) |
|
{ |
|
} |
|
|
|
void Spawn( void ); |
|
void OnRestore(); |
|
void Precache( void ); |
|
|
|
void SetZombieModel( void ); |
|
void MoanSound( envelopePoint_t *pEnvelope, int iEnvelopeSize ); |
|
bool ShouldBecomeTorso( const CTakeDamageInfo &info, float flDamageThreshold ); |
|
bool CanBecomeLiveTorso() { return !m_fIsHeadless; } |
|
|
|
void GatherConditions( void ); |
|
|
|
int SelectFailSchedule( int failedSchedule, int failedTask, AI_TaskFailureCode_t taskFailCode ); |
|
int TranslateSchedule( int scheduleType ); |
|
|
|
bool FInViewCone( const Vector &vecSpot ); |
|
bool ShouldPlayerAvoid( void ); |
|
virtual float GetIdealSpeed() const; |
|
|
|
virtual void StudioFrameAdvance(); |
|
|
|
#ifndef HL2_EPISODIC |
|
void CheckFlinches() {} // Zombie has custom flinch code |
|
#endif // HL2_EPISODIC |
|
|
|
Activity NPC_TranslateActivity( Activity newActivity ); |
|
|
|
void OnStateChange( NPC_STATE OldState, NPC_STATE NewState ); |
|
|
|
void StartTask( const Task_t *pTask ); |
|
void RunTask( const Task_t *pTask ); |
|
|
|
virtual const char *GetLegsModel( void ); |
|
virtual const char *GetTorsoModel( void ); |
|
virtual const char *GetHeadcrabClassname( void ); |
|
virtual const char *GetHeadcrabModel( void ); |
|
|
|
virtual bool OnObstructingDoor( AILocalMoveGoal_t *pMoveGoal, |
|
CBaseDoor *pDoor, |
|
float distClear, |
|
AIMoveResult_t *pResult ); |
|
|
|
virtual HeadcrabRelease_t ShouldReleaseHeadcrab( const CTakeDamageInfo &info, float flDamageThreshold ); |
|
virtual bool IsChopped( const CTakeDamageInfo &info ) { return false; } |
|
virtual bool IsSquashed( const CTakeDamageInfo &info ) { return false; } |
|
|
|
Activity SelectDoorBash(); |
|
|
|
void Ignite( float flFlameLifetime, bool bNPCOnly = true, float flSize = 0.0f, bool bCalledByLevelDesigner = false ); |
|
int OnTakeDamage_Alive( const CTakeDamageInfo &inputInfo ); |
|
bool IsHeavyDamage( const CTakeDamageInfo &info ); |
|
void BuildScheduleTestBits( void ); |
|
|
|
void PrescheduleThink( void ); |
|
int SelectSchedule ( void ); |
|
|
|
virtual void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr ); |
|
void CreateEyeGlows( void ); |
|
void RemoveEyeGlows( float flDelay ); |
|
virtual void Event_Killed( const CTakeDamageInfo &info ); |
|
virtual void UpdateOnRemove(); |
|
|
|
void PainSound( const CTakeDamageInfo &info ); |
|
void DeathSound(); |
|
void AlertSound( void ); |
|
void IdleSound( void ); |
|
void AttackSound( void ); |
|
void AttackHitSound( void ); |
|
void AttackMissSound( void ); |
|
void FootstepSound( bool fRightFoot ); |
|
void FootscuffSound( bool fRightFoot ); |
|
|
|
const char *GetMoanSound( int nSound ); |
|
|
|
public: |
|
DEFINE_CUSTOM_AI; |
|
|
|
// IASW_Spawnable_NPC implementation |
|
CHandle<CASW_Base_Spawner> m_hSpawner; |
|
void SetSpawner(CASW_Base_Spawner* spawner); |
|
CAI_BaseNPC* GetNPC() { return this; } |
|
virtual bool CanStartBurrowed() { return false; } |
|
virtual void StartBurrowed() { } |
|
virtual void SetUnburrowActivity( string_t iszActivityName ) { } |
|
virtual void SetUnburrowIdleActivity( string_t iszActivityName ) { } |
|
virtual void SetAlienOrders(AlienOrder_t Orders, Vector vecOrderSpot, CBaseEntity* pOrderObject) { } |
|
AlienOrder_t GetAlienOrders() { return AOT_None; } |
|
virtual void MoveAside() { } |
|
virtual void ASW_Ignite( float flFlameLifetime, float flSize, CBaseEntity *pAttacker, CBaseEntity *pDamagingWeapon = NULL ); |
|
virtual void ElectroStun( float flStunTime ) { } |
|
virtual void Extinguish(); |
|
CNetworkVar(bool, m_bOnFire); |
|
virtual void OnSwarmSensed(int iDistance) { } |
|
virtual void OnSwarmSenseEntity(CBaseEntity* pEnt) { } |
|
virtual void SetHealthByDifficultyLevel(); |
|
virtual void SetHoldoutAlien() { m_bHoldoutAlien = true; } |
|
virtual bool IsHoldoutAlien() { return m_bHoldoutAlien; } |
|
|
|
protected: |
|
static const char *pASWMoanSounds[]; |
|
|
|
|
|
private: |
|
CHandle< CBaseDoor > m_hBlockingDoor; |
|
float m_flDoorBashYaw; |
|
|
|
CRandSimTimer m_DurationDoorBash; |
|
CSimTimer m_NextTimeToStartDoorBash; |
|
|
|
Vector m_vPositionCharged; |
|
bool m_bHoldoutAlien; |
|
|
|
CSprite *m_pEyeGlow[2]; |
|
}; |
|
|
|
#endif // _INCLUDED_ASW_ZOMBIE_H
|