mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user