mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-18 22:41:58 +00:00
1
This commit is contained in:
@@ -0,0 +1,296 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Defines the headcrab, a tiny, jumpy alien parasite.
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef NPC_HEADCRAB_H
|
||||
#define NPC_HEADCRAB_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "ai_squadslot.h"
|
||||
#include "ai_basenpc.h"
|
||||
#include "soundent.h"
|
||||
|
||||
|
||||
|
||||
abstract_class CBaseHeadcrab : public CAI_BaseNPC
|
||||
{
|
||||
DECLARE_CLASS( CBaseHeadcrab, CAI_BaseNPC );
|
||||
|
||||
public:
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
void RunTask( const Task_t *pTask );
|
||||
void StartTask( const Task_t *pTask );
|
||||
|
||||
void OnChangeActivity( Activity NewActivity );
|
||||
|
||||
bool IsFirmlyOnGround();
|
||||
void MoveOrigin( const Vector &vecDelta );
|
||||
void ThrowAt( const Vector &vecPos );
|
||||
void ThrowThink( void );
|
||||
virtual void JumpAttack( bool bRandomJump, const Vector &vecPos = vec3_origin, bool bThrown = false );
|
||||
void JumpToBurrowHint( CAI_Hint *pHint );
|
||||
|
||||
bool HasHeadroom();
|
||||
void LeapTouch ( CBaseEntity *pOther );
|
||||
virtual void TouchDamage( CBaseEntity *pOther );
|
||||
bool CorpseGib( const CTakeDamageInfo &info );
|
||||
void Touch( CBaseEntity *pOther );
|
||||
Vector BodyTarget( const Vector &posSrc, bool bNoisy = true );
|
||||
float GetAutoAimRadius();
|
||||
void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator );
|
||||
void Ignite( float flFlameLifetime, bool bNPCOnly = true, float flSize = 0.0f, bool bCalledByLevelDesigner = false );
|
||||
|
||||
float MaxYawSpeed( void );
|
||||
void GatherConditions( void );
|
||||
void PrescheduleThink( void );
|
||||
Class_T Classify( void );
|
||||
void HandleAnimEvent( animevent_t *pEvent );
|
||||
int RangeAttack1Conditions ( float flDot, float flDist );
|
||||
int OnTakeDamage_Alive( const CTakeDamageInfo &info );
|
||||
void ClampRagdollForce( const Vector &vecForceIn, Vector *vecForceOut );
|
||||
void Event_Killed( const CTakeDamageInfo &info );
|
||||
void BuildScheduleTestBits( void );
|
||||
bool FValidateHintType( CAI_Hint *pHint );
|
||||
|
||||
bool IsJumping( void ) { return m_bMidJump; }
|
||||
|
||||
virtual void BiteSound( void ) = 0;
|
||||
virtual void AttackSound( void ) {};
|
||||
virtual void ImpactSound( void ) {};
|
||||
virtual void TelegraphSound( void ) {};
|
||||
|
||||
virtual int SelectSchedule( void );
|
||||
virtual int SelectFailSchedule( int failedSchedule, int failedTask, AI_TaskFailureCode_t taskFailCode );
|
||||
virtual int TranslateSchedule( int scheduleType );
|
||||
|
||||
virtual float GetReactionDelay( CBaseEntity *pEnemy ) { return 0.0; }
|
||||
|
||||
bool HandleInteraction(int interactionType, void *data, CBaseCombatCharacter* sourceEnt);
|
||||
|
||||
void CrawlFromCanister();
|
||||
|
||||
virtual bool AllowedToIgnite( void ) { return true; }
|
||||
|
||||
virtual bool CanBeAnEnemyOf( CBaseEntity *pEnemy );
|
||||
|
||||
bool IsHangingFromCeiling( void )
|
||||
{
|
||||
#ifdef HL2_EPISODIC
|
||||
return m_bHangingFromCeiling;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
virtual void PlayerHasIlluminatedNPC( CBasePlayer *pPlayer, float flDot );
|
||||
|
||||
void DropFromCeiling( void );
|
||||
|
||||
DEFINE_CUSTOM_AI;
|
||||
DECLARE_DATADESC();
|
||||
|
||||
protected:
|
||||
void HeadcrabInit();
|
||||
|
||||
void Leap( const Vector &vecVel );
|
||||
|
||||
void GrabHintNode( CAI_Hint *pHint );
|
||||
bool FindBurrow( const Vector &origin, float distance, bool excludeNear );
|
||||
bool ValidBurrowPoint( const Vector &point );
|
||||
void ClearBurrowPoint( const Vector &origin );
|
||||
void Burrow( void );
|
||||
void Unburrow( void );
|
||||
void SetBurrowed( bool bBurrowed );
|
||||
void JumpFromCanister();
|
||||
|
||||
// Begins the climb from the canister
|
||||
void BeginClimbFromCanister();
|
||||
|
||||
void InputBurrow( inputdata_t &inputdata );
|
||||
void InputBurrowImmediate( inputdata_t &inputdata );
|
||||
void InputUnburrow( inputdata_t &inputdata );
|
||||
|
||||
void InputStartHangingFromCeiling( inputdata_t &inputdata );
|
||||
void InputDropFromCeiling( inputdata_t &inputdata );
|
||||
|
||||
int CalcDamageInfo( CTakeDamageInfo *pInfo );
|
||||
void CreateDust( bool placeDecal = true );
|
||||
|
||||
// Eliminates roll + pitch potentially in the headcrab at canister jump time
|
||||
void EliminateRollAndPitch();
|
||||
|
||||
float InnateRange1MinRange( void );
|
||||
float InnateRange1MaxRange( void );
|
||||
|
||||
protected:
|
||||
int m_nGibCount;
|
||||
float m_flTimeDrown;
|
||||
Vector m_vecCommittedJumpPos; // The position of our enemy when we locked in our jump attack.
|
||||
|
||||
float m_flNextNPCThink;
|
||||
float m_flIgnoreWorldCollisionTime;
|
||||
|
||||
bool m_bCommittedToJump; // Whether we have 'locked in' to jump at our enemy.
|
||||
bool m_bCrawlFromCanister;
|
||||
bool m_bStartBurrowed;
|
||||
bool m_bBurrowed;
|
||||
bool m_bHidden;
|
||||
bool m_bMidJump;
|
||||
bool m_bAttackFailed; // whether we ran into a wall during a jump.
|
||||
|
||||
float m_flBurrowTime;
|
||||
int m_nContext; // for FValidateHintType context
|
||||
int m_nJumpFromCanisterDir;
|
||||
|
||||
bool m_bHangingFromCeiling;
|
||||
float m_flIlluminatedTime;
|
||||
};
|
||||
|
||||
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
// The ever popular chubby classic headcrab
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
class CHeadcrab : public CBaseHeadcrab
|
||||
{
|
||||
DECLARE_CLASS( CHeadcrab, CBaseHeadcrab );
|
||||
|
||||
public:
|
||||
void Precache( void );
|
||||
void Spawn( void );
|
||||
|
||||
float MaxYawSpeed( void );
|
||||
Activity NPC_TranslateActivity( Activity eNewActivity );
|
||||
|
||||
void BiteSound( void );
|
||||
void PainSound( const CTakeDamageInfo &info );
|
||||
void DeathSound( const CTakeDamageInfo &info );
|
||||
void IdleSound( void );
|
||||
void AlertSound( void );
|
||||
void AttackSound( void );
|
||||
void TelegraphSound( void );
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
// The spindly, fast headcrab
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
class CFastHeadcrab : public CBaseHeadcrab
|
||||
{
|
||||
DECLARE_DATADESC();
|
||||
public:
|
||||
DECLARE_CLASS( CFastHeadcrab, CBaseHeadcrab );
|
||||
|
||||
void Precache( void );
|
||||
void Spawn( void );
|
||||
bool QuerySeeEntity(CBaseEntity *pSightEnt, bool bOnlyHateOrFearIfNPC = false);
|
||||
|
||||
float MaxYawSpeed( void );
|
||||
|
||||
void PrescheduleThink( void );
|
||||
void RunTask( const Task_t *pTask );
|
||||
void StartTask( const Task_t *pTask );
|
||||
|
||||
int SelectSchedule( void );
|
||||
int TranslateSchedule( int scheduleType );
|
||||
|
||||
int m_iRunMode;
|
||||
float m_flRealGroundSpeed;
|
||||
float m_flSlowRunTime;
|
||||
float m_flPauseTime;
|
||||
Vector m_vecJumpVel;
|
||||
|
||||
void BiteSound( void );
|
||||
void PainSound( const CTakeDamageInfo &info );
|
||||
void DeathSound( const CTakeDamageInfo &info );
|
||||
void IdleSound( void );
|
||||
void AlertSound( void );
|
||||
void AttackSound( void );
|
||||
|
||||
enum SquadSlot_t
|
||||
{
|
||||
SQUAD_SLOT_ENGAGE1 = LAST_SHARED_SQUADSLOT,
|
||||
SQUAD_SLOT_ENGAGE2,
|
||||
SQUAD_SLOT_ENGAGE3,
|
||||
SQUAD_SLOT_ENGAGE4,
|
||||
};
|
||||
|
||||
DEFINE_CUSTOM_AI;
|
||||
};
|
||||
|
||||
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
// Treacherous black headcrab
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
class CBlackHeadcrab : public CBaseHeadcrab
|
||||
{
|
||||
DECLARE_CLASS( CBlackHeadcrab, CBaseHeadcrab );
|
||||
|
||||
public:
|
||||
void Eject( const QAngle &vecAngles, float flVelocityScale, CBaseEntity *pEnemy );
|
||||
void EjectTouch( CBaseEntity *pOther );
|
||||
|
||||
//
|
||||
// CBaseHeadcrab implementation.
|
||||
//
|
||||
void TouchDamage( CBaseEntity *pOther );
|
||||
void BiteSound( void );
|
||||
void AttackSound( void );
|
||||
|
||||
//
|
||||
// CAI_BaseNPC implementation.
|
||||
//
|
||||
virtual void PrescheduleThink( void );
|
||||
virtual void BuildScheduleTestBits( void );
|
||||
virtual int SelectSchedule( void );
|
||||
virtual int TranslateSchedule( int scheduleType );
|
||||
|
||||
virtual Activity NPC_TranslateActivity( Activity eNewActivity );
|
||||
virtual void HandleAnimEvent( animevent_t *pEvent );
|
||||
virtual float MaxYawSpeed( void );
|
||||
|
||||
virtual int GetSoundInterests( void ) { return (BaseClass::GetSoundInterests() | SOUND_DANGER | SOUND_BULLET_IMPACT); }
|
||||
|
||||
bool IsHeavyDamage( const CTakeDamageInfo &info );
|
||||
|
||||
virtual void PainSound( const CTakeDamageInfo &info );
|
||||
virtual void DeathSound( const CTakeDamageInfo &info );
|
||||
virtual void IdleSound( void );
|
||||
virtual void AlertSound( void );
|
||||
virtual void ImpactSound( void );
|
||||
virtual void TelegraphSound( void );
|
||||
#if HL2_EPISODIC
|
||||
virtual bool FInViewCone( CBaseEntity *pEntity );
|
||||
#endif
|
||||
|
||||
//
|
||||
// CBaseEntity implementation.
|
||||
//
|
||||
virtual void Precache( void );
|
||||
virtual void Spawn( void );
|
||||
|
||||
DEFINE_CUSTOM_AI;
|
||||
DECLARE_DATADESC();
|
||||
|
||||
private:
|
||||
|
||||
|
||||
void JumpFlinch( const Vector *pvecAwayFromPos );
|
||||
void Panic( float flDuration );
|
||||
|
||||
bool m_bPanicState;
|
||||
float m_flPanicStopTime;
|
||||
float m_flNextHopTime; // Keeps us from hopping too often due to damage.
|
||||
};
|
||||
|
||||
|
||||
#endif // NPC_HEADCRAB_H
|
||||
Reference in New Issue
Block a user