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.
111 lines
2.7 KiB
111 lines
2.7 KiB
![]()
4 years ago
|
//========= 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
|