Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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
|