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

92 lines
2.7 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef NPC_ASSASSIN_H
#define NPC_ASSASSIN_H
#ifdef _WIN32
#pragma once
#endif
#include "Sprite.h"
#include "SpriteTrail.h"
#include "ai_basenpc.h"
#include "soundent.h"
// Eye states
enum eyeState_t {
ASSASSIN_EYE_SEE_TARGET = 0, // Sees the target, bright and big
ASSASSIN_EYE_SEEKING_TARGET, // Looking for a target, blinking (bright)
ASSASSIN_EYE_ACTIVE, // Actively looking
ASSASSIN_EYE_DORMANT, // Not active
ASSASSIN_EYE_DEAD, // Completely invisible
};
//=========================================================
//=========================================================
class CNPC_Assassin : public CAI_BaseNPC {
public:
DECLARE_CLASS(CNPC_Assassin, CAI_BaseNPC);
// DECLARE_SERVERCLASS();
DECLARE_DATADESC();
CNPC_Assassin(void);
Class_T Classify(void) { return CLASS_COMBINE; }
int GetSoundInterests(void) {
return (SOUND_WORLD | SOUND_COMBAT | SOUND_PLAYER);
}
int SelectSchedule(void);
int MeleeAttack1Conditions(float flDot, float flDist);
int RangeAttack1Conditions(float flDot, float flDist);
int RangeAttack2Conditions(float flDot, float flDist);
void Precache(void);
void Spawn(void);
void PrescheduleThink(void);
void HandleAnimEvent(animevent_t *pEvent);
void StartTask(const Task_t *pTask);
void RunTask(const Task_t *pTask);
void OnScheduleChange(void);
void GatherEnemyConditions(CBaseEntity *pEnemy);
void BuildScheduleTestBits(void);
void Event_Killed(const CTakeDamageInfo &info);
bool FValidateHintType(CAI_Hint *pHint);
bool IsJumpLegal(const Vector &startPos, const Vector &apex,
const Vector &endPos) const;
bool MovementCost(int moveType, const Vector &vecStart,
const Vector &vecEnd, float *pCost);
float MaxYawSpeed(void);
const Vector &GetViewOffset(void);
private:
void SetEyeState(eyeState_t state);
void FirePistol(int hand);
bool CanFlip(int flipType, Activity &activity, const Vector *avoidPosition);
int m_nNumFlips;
int m_nLastFlipType;
float m_flNextFlipTime; // Next earliest time the assassin can flip again
float m_flNextLungeTime;
float m_flNextShotTime;
bool m_bEvade;
bool m_bAggressive; // Sets certain state, including whether or not her eye
// is visible
bool m_bBlinkState;
CSprite *m_pEyeSprite;
CSpriteTrail *m_pEyeTrail;
DEFINE_CUSTOM_AI;
};
#endif // NPC_ASSASSIN_H