diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/hl2/extinguisherjet.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/hl2/extinguisherjet.cpp')
| -rw-r--r-- | game/server/hl2/extinguisherjet.cpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/game/server/hl2/extinguisherjet.cpp b/game/server/hl2/extinguisherjet.cpp new file mode 100644 index 0000000..de8e285 --- /dev/null +++ b/game/server/hl2/extinguisherjet.cpp @@ -0,0 +1,202 @@ +//========= 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 ); + } +} |