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.
110 lines
2.7 KiB
110 lines
2.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
#ifndef NPC_TURRET_GROUND_H |
|
#define NPC_TURRET_GROUND_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "ai_basenpc.h" |
|
#include "smoke_trail.h" |
|
|
|
//========================================================= |
|
//========================================================= |
|
class CNPC_GroundTurret : public CAI_BaseNPC |
|
{ |
|
public: |
|
DECLARE_CLASS( CNPC_GroundTurret, CAI_BaseNPC ); |
|
DECLARE_DATADESC(); |
|
|
|
void Precache( void ); |
|
virtual void Spawn( void ); |
|
bool CreateVPhysics( void ); |
|
void PrescheduleThink(); |
|
Class_T Classify( void ); |
|
|
|
void PostNPCInit(); |
|
|
|
// Damage & Death |
|
virtual int OnTakeDamage_Alive( const CTakeDamageInfo &info ); |
|
void Event_Killed( const CTakeDamageInfo &info ); |
|
void DeathEffects(); |
|
bool CanBecomeRagdoll( void ) { return false; } |
|
void DeathSound( const CTakeDamageInfo &info ); |
|
|
|
// Combat |
|
void MakeTracer( const Vector &vecTracerSrc, const trace_t &tr, int iTracerType ); |
|
Vector GetAttackSpread( CBaseCombatWeapon *pWeapon, CBaseEntity *pTarget ) |
|
{ |
|
return VECTOR_CONE_5DEGREES; |
|
} |
|
|
|
|
|
// Sensing |
|
void GatherConditions(); |
|
Vector EyePosition(); |
|
bool FVisible( CBaseEntity *pEntity, int traceMask, CBaseEntity **ppBlocker ); |
|
bool QuerySeeEntity( CBaseEntity *pEntity, bool bOnlyHateOrFearIfNPC = false ); |
|
|
|
|
|
bool IsOpeningOrClosing() { return (GetAbsVelocity().z != 0.0f); } |
|
bool IsEnabled(); |
|
bool IsOpen(); |
|
|
|
// Tasks & Schedules |
|
void StartTask( const Task_t *pTask ); |
|
void RunTask( const Task_t *pTask ); |
|
virtual int SelectSchedule( void ); |
|
virtual int TranslateSchedule( int scheduleType ); |
|
|
|
// Activities & Animation |
|
Activity NPC_TranslateActivity( Activity eNewActivity ); |
|
virtual void Shoot(); |
|
virtual void Scan(); |
|
void ProjectBeam( const Vector &vecStart, const Vector &vecDir, int width, int brightness, float duration ); |
|
|
|
// Local |
|
void SetActive( bool bActive ) {} |
|
|
|
// Inputs |
|
void InputEnable( inputdata_t &inputdata ); |
|
void InputDisable( inputdata_t &inputdata ); |
|
|
|
// Outputs |
|
COutputEvent m_OnAreaClear; |
|
|
|
DEFINE_CUSTOM_AI; |
|
|
|
protected: |
|
//----------------------------------------------------- |
|
// Conditions, Schedules, Tasks |
|
//----------------------------------------------------- |
|
enum |
|
{ |
|
SCHED_GROUND_TURRET_IDLE = BaseClass::NEXT_SCHEDULE, |
|
SCHED_GROUND_TURRET_ATTACK, |
|
|
|
TASK_GROUNDTURRET_SCAN = BaseClass::NEXT_TASK, |
|
}; |
|
|
|
int m_iAmmoType; |
|
SmokeTrail *m_pSmoke; |
|
|
|
bool m_bEnabled; |
|
|
|
float m_flTimeNextShoot; |
|
float m_flTimeLastSawEnemy; |
|
Vector m_vecSpread; |
|
bool m_bHasExploded; |
|
int m_iDeathSparks; |
|
float m_flSensingDist; |
|
bool m_bSeeEnemy; |
|
float m_flTimeNextPing; |
|
|
|
Vector m_vecClosedPos; |
|
|
|
Vector m_vecLightOffset; |
|
|
|
HSOUNDSCRIPTHANDLE m_ShotSounds; |
|
}; |
|
|
|
#endif //#ifndef NPC_TURRET_GROUND_H
|
|
|