127 lines
3.1 KiB
C++
127 lines
3.1 KiB
C++
#include "cbase.h"
|
|
#include "asw_holoscan.h"
|
|
#include "beam_shared.h"
|
|
#include "ai_debug_shared.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
LINK_ENTITY_TO_CLASS( asw_holoscan, CASW_HoloScan );
|
|
PRECACHE_REGISTER( asw_holoscan );
|
|
|
|
BEGIN_DATADESC( CASW_HoloScan )
|
|
DEFINE_THINKFUNC( ScanThink ),
|
|
DEFINE_KEYFIELD( m_bEnabled, FIELD_BOOLEAN, "enabled" ),
|
|
DEFINE_KEYFIELD( m_bStartDisabled, FIELD_BOOLEAN, "StartDisabled" ),
|
|
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ),
|
|
END_DATADESC()
|
|
|
|
#define GROUNDTURRET_VIEWCONE 60.0f
|
|
#define GROUNDTURRET_BEAM_SPRITE "materials/swarm/effects/greenlaser1.vmt"
|
|
#define HOLOBEAMLENGTH 350.0f
|
|
|
|
void CASW_HoloScan::Spawn( void )
|
|
{
|
|
Precache();
|
|
|
|
BaseClass::Spawn();
|
|
|
|
m_bEnabled = !m_bStartDisabled;
|
|
|
|
m_flTimeNextScanPing = 0;
|
|
|
|
SetThink( &CASW_HoloScan::ScanThink );
|
|
SetNextThink( gpGlobals->curtime + 0.1f );
|
|
}
|
|
|
|
void CASW_HoloScan::Precache()
|
|
{
|
|
BaseClass::Precache();
|
|
|
|
PrecacheModel( GROUNDTURRET_BEAM_SPRITE );
|
|
}
|
|
|
|
int CASW_HoloScan::ShouldTransmit( const CCheckTransmitInfo *pInfo )
|
|
{
|
|
return FL_EDICT_ALWAYS;
|
|
}
|
|
|
|
int CASW_HoloScan::UpdateTransmitState()
|
|
{
|
|
return SetTransmitState( FL_EDICT_FULLCHECK );
|
|
}
|
|
|
|
void CASW_HoloScan::ScanThink()
|
|
{
|
|
if ( m_bEnabled )
|
|
{
|
|
Scan();
|
|
}
|
|
|
|
SetNextThink( gpGlobals->curtime + 0.1f );
|
|
}
|
|
|
|
void CASW_HoloScan::Scan()
|
|
{
|
|
if( gpGlobals->curtime >= m_flTimeNextScanPing )
|
|
{
|
|
//EmitSound( "NPC_FloorTurret.Ping" );
|
|
m_flTimeNextScanPing = gpGlobals->curtime + 1.0f;
|
|
}
|
|
|
|
QAngle scanAngle;
|
|
Vector forward;
|
|
Vector vecEye = GetAbsOrigin();// + m_vecLightOffset;
|
|
|
|
// Draw the outer extents
|
|
scanAngle = GetAbsAngles();
|
|
scanAngle.y += (GROUNDTURRET_VIEWCONE / 2.0f);
|
|
AngleVectors( scanAngle, &forward, NULL, NULL );
|
|
ProjectBeam( vecEye, forward, 1, 30, 0.1 );
|
|
|
|
scanAngle = GetAbsAngles();
|
|
scanAngle.y -= (GROUNDTURRET_VIEWCONE / 2.0f);
|
|
AngleVectors( scanAngle, &forward, NULL, NULL );
|
|
ProjectBeam( vecEye, forward, 1, 30, 0.1 );
|
|
|
|
// Draw a sweeping beam
|
|
scanAngle = GetAbsAngles();
|
|
scanAngle.y += (GROUNDTURRET_VIEWCONE / 2.0f) * sin( gpGlobals->curtime * 3.0f );
|
|
|
|
AngleVectors( scanAngle, &forward, NULL, NULL );
|
|
ProjectBeam( vecEye, forward, 1, 30, 0.3 );
|
|
}
|
|
|
|
void CASW_HoloScan::ProjectBeam( const Vector &vecStart, const Vector &vecDir, int width, int brightness, float duration )
|
|
{
|
|
CBeam *pBeam;
|
|
pBeam = CBeam::BeamCreate( GROUNDTURRET_BEAM_SPRITE, width );
|
|
if ( !pBeam )
|
|
return;
|
|
|
|
trace_t tr;
|
|
AI_TraceLine( vecStart, vecStart + vecDir * HOLOBEAMLENGTH, MASK_SHOT, this, COLLISION_GROUP_NONE, &tr );
|
|
|
|
pBeam->SetStartPos( tr.endpos );
|
|
pBeam->SetEndPos( tr.startpos );
|
|
pBeam->SetWidth( width );
|
|
pBeam->SetEndWidth( 0.1 );
|
|
pBeam->SetFadeLength( 16 );
|
|
|
|
pBeam->SetBrightness( brightness );
|
|
pBeam->SetColor( 255, 255, 255 );
|
|
pBeam->RelinkBeam();
|
|
pBeam->LiveForTime( duration );
|
|
}
|
|
|
|
void CASW_HoloScan::InputEnable( inputdata_t &inputdata )
|
|
{
|
|
m_bEnabled = true;
|
|
}
|
|
|
|
void CASW_HoloScan::InputDisable( inputdata_t &inputdata )
|
|
{
|
|
m_bEnabled = false;
|
|
} |