1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2024-12-23 01:59:43 +08:00
hl2sdk/game/server/hl2/npc_assassin.h
2013-06-26 15:22:04 -07:00

91 lines
2.6 KiB
C++

//========= 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