This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

116 lines
3.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef NPC_STALKER_H
#define NPC_STALKER_H
#ifdef _WIN32
#pragma once
#endif
#include "ai_basenpc.h"
#include "ai_behavior.h"
#include "ai_behavior_actbusy.h"
#include "entityoutput.h"
class CBeam;
class CSprite;
class CScriptedTarget;
typedef CAI_BehaviorHost<CAI_BaseNPC> CAI_BaseStalker;
class CNPC_Stalker : public CAI_BaseStalker {
DECLARE_CLASS(CNPC_Stalker, CAI_BaseStalker);
public:
float m_flNextAttackSoundTime;
float m_flNextBreatheSoundTime;
float m_flNextScrambleSoundTime;
float m_flNextNPCThink;
// ------------------------------
// Laser Beam
// ------------------------------
int m_eBeamPower;
Vector m_vLaserDir;
Vector m_vLaserTargetPos;
float m_fBeamEndTime;
float m_fBeamRechargeTime;
float m_fNextDamageTime;
float m_nextSmokeTime;
float m_bPlayingHitWall;
float m_bPlayingHitFlesh;
CBeam *m_pBeam;
CSprite *m_pLightGlow;
int m_iPlayerAggression;
float m_flNextScreamTime;
void KillAttackBeam(void);
void DrawAttackBeam(void);
void CalcBeamPosition(void);
Vector LaserStartPosition(Vector vStalkerPos);
Vector m_vLaserCurPos; // Last position successfully burned
bool InnateWeaponLOSCondition(const Vector &ownerPos,
const Vector &targetPos, bool bSetConditions);
// ------------------------------
// Dormancy
// ------------------------------
CAI_Schedule *WakeUp(void);
void GoDormant(void);
public:
void Spawn(void);
void Precache(void);
bool CreateBehaviors();
float MaxYawSpeed(void);
Class_T Classify(void);
void PrescheduleThink();
bool IsValidEnemy(CBaseEntity *pEnemy);
void StartTask(const Task_t *pTask);
void RunTask(const Task_t *pTask);
virtual int SelectSchedule(void);
virtual int TranslateSchedule(int scheduleType);
int OnTakeDamage_Alive(const CTakeDamageInfo &info);
void OnScheduleChange();
void StalkerThink(void);
void NotifyDeadFriend(CBaseEntity *pFriend);
int MeleeAttack1Conditions(float flDot, float flDist);
int RangeAttack1Conditions(float flDot, float flDist);
void HandleAnimEvent(animevent_t *pEvent);
bool FValidateHintType(CAI_Hint *pHint);
Activity GetHintActivity(short sHintType, Activity HintsActivity);
float GetHintDelay(short sHintType);
void IdleSound(void);
void DeathSound(const CTakeDamageInfo &info);
void PainSound(const CTakeDamageInfo &info);
void Event_Killed(const CTakeDamageInfo &info);
void DoSmokeEffect(const Vector &position);
void AddZigZagToPath(void);
void StartAttackBeam();
void UpdateAttackBeam();
CNPC_Stalker(void);
DECLARE_DATADESC();
DEFINE_CUSTOM_AI;
private:
CAI_ActBusyBehavior m_ActBusyBehavior;
};
#endif // NPC_STALKER_H