//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Hooks and classes for the support of humanoid NPCs with // groovy facial animation capabilities, aka, "Actors" // //=============================================================================// #ifndef AI_INTEREST_TARGET_H #define AI_INTEREST_TARGET_H #if defined(_WIN32) #pragma once #endif //----------------------------------------------------------------------------- // CAI_BaseActor // // Purpose: The base class for all facially expressive NPCS. // //----------------------------------------------------------------------------- class CAI_InterestTarget_t { public: enum CAI_InterestTarget_e { LOOKAT_ENTITY = 0, LOOKAT_POSITION, LOOKAT_BOTH }; public: bool IsThis(CBaseEntity *pThis); const Vector &GetPosition(void); bool IsActive(void); float Interest(void); public: CAI_InterestTarget_e m_eType; // ???? EHANDLE m_hTarget; Vector m_vecPosition; float m_flStartTime; float m_flEndTime; float m_flRamp; float m_flInterest; DECLARE_SIMPLE_DATADESC(); }; class CAI_InterestTarget : public CUtlVector { public: void Add(CBaseEntity *pTarget, float flImportance, float flDuration, float flRamp); void Add(const Vector &vecPosition, float flImportance, float flDuration, float flRamp); void Add(CBaseEntity *pTarget, const Vector &vecPosition, float flImportance, float flDuration, float flRamp); int Find(CBaseEntity *pTarget) { int i; for (i = 0; i < Count(); i++) { if (pTarget == (*this)[i].m_hTarget) return i; } return InvalidIndex(); } void Cleanup(void) { int i; for (i = Count() - 1; i >= 0; i--) { if (!Element(i).IsActive()) { Remove(i); } } }; private: void Add(CAI_InterestTarget_t::CAI_InterestTarget_e type, CBaseEntity *pTarget, const Vector &vecPosition, float flImportance, float flDuration, float flRamp); }; //----------------------------------------------------------------------------- #endif // AI_INTEREST_TARGET_H