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.
84 lines
2.0 KiB
84 lines
2.0 KiB
5 years ago
|
//========= 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<CBeam> m_hSpotlight;
|
||
|
CHandle<CSpotlightEnd> 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
|
||
|
|
||
|
|