//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef NPC_BULLSEYE_H #define NPC_BULLSEYE_H #ifdef _WIN32 #pragma once #endif #include "ai_basenpc.h" //========================================================= // >> CBullseye //========================================================= class CNPC_Bullseye : public CAI_BaseNPC { DECLARE_CLASS( CNPC_Bullseye, CAI_BaseNPC ); public: CNPC_Bullseye(void); ~CNPC_Bullseye(); virtual void Precache( void ); virtual void Spawn( void ); virtual void Activate( void ); virtual void OnRestore( void ); virtual float GetAutoAimRadius() { return m_fAutoaimRadius; } Class_T Classify( void ); void Event_Killed( const CTakeDamageInfo &info ); void DecalTrace( trace_t *pTrace, char const *decalName ); void ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName ); bool IsLightDamage( const CTakeDamageInfo &info ); void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator ); int OnTakeDamage( const CTakeDamageInfo &info ); bool UsePerfectAccuracy( void ) { return m_bPerfectAccuracy; } bool TestHitboxes( const Ray_t &ray, unsigned int fContentsMask, trace_t& tr ) { return false; } // force traces to test against hull void BullseyeThink( void ); bool CanBecomeRagdoll( void ); void SetPainPartner( CBaseEntity *pOther ); void InputTargeted( inputdata_t &inputdata ); void InputReleased( inputdata_t &inputdata ); bool CanBecomeServerRagdoll( void ) { return false; } bool CanBeAnEnemyOf( CBaseEntity *pEnemy ); protected: EHANDLE m_hPainPartner; //Entity that the bullseye will pass any damage it take to COutputEvent m_OnTargeted; COutputEvent m_OnReleased; bool m_bPerfectAccuracy; // Entities that shoot at me should be perfectly accurate float m_fAutoaimRadius; // How much to influence player's autoaim. float m_flMinDistValidEnemy; DECLARE_DATADESC(); }; int FindBullseyesInCone( CBaseEntity **pList, int listMax, const Vector &coneOrigin, const Vector &coneAxis, float coneAngleCos, float coneLength ); #define SF_BULLSEYE_NONSOLID (1 << 16) #define SF_BULLSEYE_NODAMAGE (1 << 17) #define SF_BULLSEYE_ENEMYDAMAGEONLY (1 << 18) #define SF_BULLSEYE_BLEED (1 << 19) #define SF_BULLSEYE_PERFECTACC (1 << 20) #define SF_BULLSEYE_VPHYSICSSHADOW (1 << 21) #endif // NPC_BULLSEYE_H