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.
202 lines
5.5 KiB
202 lines
5.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "extinguisherjet.h" |
|
#include "engine/IEngineSound.h" |
|
#include "fire.h" |
|
#include "ndebugoverlay.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
extern ConVar fire_extinguisher_debug; |
|
|
|
//Networking |
|
IMPLEMENT_SERVERCLASS_ST( CExtinguisherJet, DT_ExtinguisherJet ) |
|
SendPropInt(SENDINFO(m_bEmit), 1, SPROP_UNSIGNED), |
|
SendPropInt(SENDINFO(m_bUseMuzzlePoint), 1, SPROP_UNSIGNED), |
|
SendPropInt(SENDINFO(m_nLength), 32, SPROP_UNSIGNED), |
|
SendPropInt(SENDINFO(m_nSize), 32, SPROP_UNSIGNED), |
|
END_SEND_TABLE() |
|
|
|
//Save/restore |
|
BEGIN_DATADESC( CExtinguisherJet ) |
|
|
|
//Regular fields |
|
DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), |
|
|
|
DEFINE_KEYFIELD( m_bEnabled, FIELD_BOOLEAN, "enabled" ), |
|
DEFINE_KEYFIELD( m_nLength, FIELD_INTEGER, "length" ), |
|
DEFINE_KEYFIELD( m_nSize, FIELD_INTEGER, "size" ), |
|
DEFINE_KEYFIELD( m_nRadius, FIELD_INTEGER, "radius" ), |
|
DEFINE_KEYFIELD( m_flStrength,FIELD_FLOAT, "strength" ), |
|
|
|
DEFINE_FIELD( m_bAutoExtinguish, FIELD_BOOLEAN ), |
|
DEFINE_FIELD( m_bUseMuzzlePoint, FIELD_BOOLEAN ), |
|
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "Toggle", InputToggle ), |
|
|
|
DEFINE_FUNCTION( ExtinguishThink ), |
|
|
|
END_DATADESC() |
|
|
|
|
|
LINK_ENTITY_TO_CLASS( env_extinguisherjet, CExtinguisherJet ); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Constructor |
|
//----------------------------------------------------------------------------- |
|
CExtinguisherJet::CExtinguisherJet( void ) |
|
{ |
|
m_bEmit = false; |
|
m_bEnabled = false; |
|
m_bAutoExtinguish = true; |
|
|
|
m_nLength = 128; |
|
m_nSize = 8; |
|
m_flStrength = 0.97f; //FIXME: Stub numbers |
|
m_nRadius = 32; |
|
|
|
// Send to the client even though we don't have a model |
|
AddEFlags( EFL_FORCE_CHECK_TRANSMIT ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::Spawn( void ) |
|
{ |
|
Precache(); |
|
|
|
if ( m_bEnabled ) |
|
{ |
|
TurnOn(); |
|
} |
|
} |
|
|
|
void CExtinguisherJet::Precache() |
|
{ |
|
BaseClass::Precache(); |
|
|
|
PrecacheScriptSound( "ExtinguisherJet.TurnOn" ); |
|
PrecacheScriptSound( "ExtinguisherJet.TurnOff" ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::TurnOn( void ) |
|
{ |
|
//Turn on sound |
|
if ( m_bEmit == false ) |
|
{ |
|
EmitSound( "ExtinguisherJet.TurnOn" ); |
|
m_bEnabled = m_bEmit = true; |
|
} |
|
|
|
SetThink( ExtinguishThink ); |
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::TurnOff( void ) |
|
{ |
|
//Turn off sound |
|
if ( m_bEmit ) |
|
{ |
|
EmitSound( "ExtinguisherJet.TurnOff" ); |
|
m_bEnabled = m_bEmit = false; |
|
} |
|
|
|
SetThink( NULL ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : &inputdata - |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::InputEnable( inputdata_t &inputdata ) |
|
{ |
|
TurnOn(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : &inputdata - |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::InputDisable( inputdata_t &inputdata ) |
|
{ |
|
TurnOff(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : &inputdata - |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::InputToggle( inputdata_t &inputdata ) |
|
{ |
|
if ( m_bEnabled ) |
|
{ |
|
TurnOff(); |
|
} |
|
else |
|
{ |
|
TurnOn(); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::Think( void ) |
|
{ |
|
CBaseEntity::Think(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CExtinguisherJet::ExtinguishThink( void ) |
|
{ |
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
|
|
if ( m_bEnabled == false ) |
|
return; |
|
|
|
if ( m_bAutoExtinguish == false ) |
|
return; |
|
|
|
Vector vTestPos; |
|
Vector vForward, vRight, vUp; |
|
|
|
AngleVectors( GetAbsAngles(), &vForward ); |
|
|
|
vTestPos = GetAbsOrigin() + ( vForward * m_nLength ); |
|
|
|
trace_t tr; |
|
UTIL_TraceLine( GetAbsOrigin(), vTestPos, MASK_SHOT, this, COLLISION_GROUP_NONE, &tr ); |
|
|
|
//Extinguish the fire where we hit |
|
FireSystem_ExtinguishInRadius( tr.endpos, m_nRadius, m_flStrength ); |
|
|
|
//Debug visualization |
|
if ( fire_extinguisher_debug.GetInt() ) |
|
{ |
|
int radius = m_nRadius; |
|
|
|
NDebugOverlay::Line( GetAbsOrigin(), tr.endpos, 0, 0, 128, false, 0.1f ); |
|
|
|
NDebugOverlay::Box( GetAbsOrigin(), Vector(-1, -1, -1), Vector(1, 1, 1), 0, 0, 128, false, 0.1f ); |
|
NDebugOverlay::Box( tr.endpos, Vector(-2, -2, -2), Vector(2, 2, 2), 0, 0, 128, false, 0.1f ); |
|
NDebugOverlay::Box( tr.endpos, Vector(-radius, -radius, -radius), Vector(radius, radius, radius), 0, 0, 255, false, 0.1f ); |
|
} |
|
}
|
|
|