//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef AI_SPOTLIGHT_H #define AI_SPOTLIGHT_H #ifdef _WIN32 #pragma once #endif #include "ai_component.h" class CBeam; class CSprite; class SmokeTrail; class CSpotlightEnd; //----------------------------------------------------------------------------- // Parameters for how the scanner relates to citizens. //----------------------------------------------------------------------------- enum { AI_SPOTLIGHT_NO_DLIGHTS = 0x1, }; class CAI_Spotlight : public CAI_Component { DECLARE_SIMPLE_DATADESC(); DECLARE_CLASS_NOBASE(CAI_Spotlight); public: CAI_Spotlight(); ~CAI_Spotlight(); void Init(CAI_BaseNPC *pOuter, int nFlags, float flConstraintAngle, float flMaxLength); // Create, destroy the spotlight void SpotlightCreate(int nAttachment, const Vector &vecInitialDir); void SpotlightDestroy(void); // Controls the spotlight target position + direction void SetSpotlightTargetPos(const Vector &vSpotlightTargetPos); void SetSpotlightTargetDirection(const Vector &vSpotlightTargetDir); // Updates the spotlight. Call every frame! void Update(void); private: void Precache(void); void CreateSpotlightEntities(void); void UpdateSpotlightDirection(void); void UpdateSpotlightEndpoint(void); // Constrain to cone, returns true if it was constrained bool ConstrainToCone(Vector *pDirection); // Computes the spotlight endpoint void ComputeEndpoint(const Vector &vecStartPoint, Vector *pEndPoint); private: CHandle m_hSpotlight; CHandle m_hSpotlightTarget; Vector m_vSpotlightTargetPos; Vector m_vSpotlightDir; float m_flSpotlightCurLength; float m_flSpotlightMaxLength; float m_flConstraintAngle; int m_nHaloSprite; int m_nSpotlightAttachment; int m_nFlags; Quaternion m_vAngularVelocity; }; #endif // AI_SPOTLIGHT_H