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.
91 lines
2.5 KiB
91 lines
2.5 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef NPC_ASSASSIN_H
|
||
|
#define NPC_ASSASSIN_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "ai_basenpc.h"
|
||
|
#include "Sprite.h"
|
||
|
#include "SpriteTrail.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
|