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/client/dod/fx_dod_tracers.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/dod/fx_dod_tracers.cpp')
| -rw-r--r-- | game/client/dod/fx_dod_tracers.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/game/client/dod/fx_dod_tracers.cpp b/game/client/dod/fx_dod_tracers.cpp new file mode 100644 index 0000000..1754c80 --- /dev/null +++ b/game/client/dod/fx_dod_tracers.cpp @@ -0,0 +1,152 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Game-specific impact effect hooks +// +//============================================================================= +#include "cbase.h" +#include "fx.h" +#include "c_te_effect_dispatch.h" +#include "tier0/vprof.h" +#include "clientsideeffects.h" +#include "clienteffectprecachesystem.h" +#include "view.h" +#include "collisionutils.h" +#include "SoundEmitterSystem/isoundemittersystembase.h" +#include "engine/IEngineSound.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +CLIENTEFFECT_REGISTER_BEGIN( PrecacheDodTracers ) +CLIENTEFFECT_MATERIAL( "effects/fainttracer" ) +CLIENTEFFECT_MATERIAL( "effects/spark" ) +CLIENTEFFECT_REGISTER_END() + +#define LISTENER_HEIGHT 24 + + +#define TRACER_TYPE_FAINT 4 + +void FX_DoDTracerSound( const Vector &start, const Vector &end, int iTracerType ) +{ + // don't play on very short hits + if ( ( start - end ).Length() < 200 ) + return; + + const char *pszSoundName = "Bullets.DefaultNearmiss"; + float flWhizDist = 64; + Vector vecListenOrigin = MainViewOrigin(); + + switch( iTracerType ) + { + case TRACER_TYPE_DEFAULT: + flWhizDist = 96; + // fall through ! + + default: + { + Ray_t bullet, listener; + bullet.Init( start, end ); + + Vector vecLower = vecListenOrigin; + vecLower.z -= LISTENER_HEIGHT; + listener.Init( vecListenOrigin, vecLower ); + + float s, t; + IntersectRayWithRay( bullet, listener, s, t ); + t = clamp( t, 0, 1 ); + vecListenOrigin.z -= t * LISTENER_HEIGHT; + } + break; + } + + static float flNextWhizTime = 0; + + // Is it time yet? + float dt = flNextWhizTime - gpGlobals->curtime; + if ( dt > 0 ) + return; + + // Did the thing pass close enough to our head? + float vDist = CalcDistanceSqrToLineSegment( vecListenOrigin, start, end ); + if ( vDist >= (flWhizDist * flWhizDist) ) + return; + + CSoundParameters params; + if( C_BaseEntity::GetParametersForSound( pszSoundName, params, NULL ) ) + { + // Get shot direction + Vector shotDir; + VectorSubtract( end, start, shotDir ); + VectorNormalize( shotDir ); + + CLocalPlayerFilter filter; + enginesound->EmitSound( filter, SOUND_FROM_WORLD, CHAN_STATIC, params.soundname, + params.volume, SNDLVL_TO_ATTN(params.soundlevel), 0, params.pitch, 0, &start, &shotDir, NULL); + } + + // Don't play another bullet whiz for this client until this time has run out + flNextWhizTime = gpGlobals->curtime + 0.1f; +} + +void FX_FaintTracer( Vector& start, Vector& end ) +{ + if ( random->RandomInt( 0, 2 ) == 0 ) + { + //Don't make small tracers + float dist; + Vector dir; + int velocity = 5000; + + VectorSubtract( end, start, dir ); + dist = VectorNormalize( dir ); + + float length = random->RandomFloat( 32.0f, 64.0f ); + float life = ( dist + length ) / velocity; //NOTENOTE: We want the tail to finish its run as well + + //Add it + FX_AddDiscreetLine( start, dir, velocity, length, dist, random->RandomFloat( 0.75f, 0.9f ), life, "effects/fainttracer" ); + } + + FX_DoDTracerSound( start, end, TRACER_TYPE_DEFAULT+1 ); //not default! +} + +void FX_BrightTracer( Vector& start, Vector& end ) +{ + //Don't make small tracers + float dist; + Vector dir; + int velocity = 5000; + + VectorSubtract( end, start, dir ); + dist = VectorNormalize( dir ); + + // Don't make short tracers. + float length = random->RandomFloat( 64.0f, 128.0f ); + float life = ( dist + length ) / velocity; //NOTENOTE: We want the tail to finish its run as well + + //Add it + FX_AddDiscreetLine( start, dir, velocity, length, dist, random->RandomFloat( 0.75f, 0.9f ), life, "effects/spark" ); + + FX_DoDTracerSound( start, end, TRACER_TYPE_DEFAULT ); +} + +//----------------------------------------------------------------------------- +// Purpose: Faint Tracer for most dod weapons +//----------------------------------------------------------------------------- +void FaintTracerCallback( const CEffectData &data ) +{ + FX_FaintTracer( (Vector&)data.m_vStart, (Vector&)data.m_vOrigin ); +} + + +//----------------------------------------------------------------------------- +// Purpose: Bright Tracer for Machine Guns +//----------------------------------------------------------------------------- +void BrightTracerCallback( const CEffectData &data ) +{ + FX_BrightTracer( (Vector&)data.m_vStart, (Vector&)data.m_vOrigin ); +} + +DECLARE_CLIENT_EFFECT( "FaintTracer", FaintTracerCallback ); +DECLARE_CLIENT_EFFECT( "BrightTracer", BrightTracerCallback );
\ No newline at end of file |