diff options
Diffstat (limited to 'game/client/tf2/fx_tf2_tracers.cpp')
| -rw-r--r-- | game/client/tf2/fx_tf2_tracers.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/game/client/tf2/fx_tf2_tracers.cpp b/game/client/tf2/fx_tf2_tracers.cpp new file mode 100644 index 0000000..b91552b --- /dev/null +++ b/game/client/tf2/fx_tf2_tracers.cpp @@ -0,0 +1,105 @@ +//========= 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 "clienteffectprecachesystem.h" +#include "clientsideeffects.h" + +// Precache the effects +CLIENTEFFECT_REGISTER_BEGIN( PrecacheTF2TracerEffects ) +CLIENTEFFECT_MATERIAL( "effects/human_bullet" ) +CLIENTEFFECT_MATERIAL( "effects/alien_laser" ) +CLIENTEFFECT_REGISTER_END() + +Vector GetTracerOrigin( const CEffectData &data ); + +//----------------------------------------------------------------------------- +// Purpose: Human's laser rifle Tracer +//----------------------------------------------------------------------------- +void HLaserTracerCallback( const CEffectData &data ) +{ + float flVelocity = data.m_flScale; + Vector vecStart = GetTracerOrigin( data ); + Vector vecEnd = data.m_vOrigin; + Vector shotDir; + + // Get out shot direction and length + VectorSubtract( vecEnd, vecStart, shotDir ); + float totalDist = VectorNormalize( shotDir ); + + // Don't make small tracers + if ( totalDist <= 32 ) + return; + + float length = MAX( 64, random->RandomFloat( 200.0f, 256.0f ) ); + flVelocity = random->RandomFloat( 5000, 7000 ); + float life = ( totalDist + length ) / flVelocity; + float flWidth = random->RandomFloat( 2.0, 2.5 ); + + // Add it + FX_AddDiscreetLine( vecStart, shotDir, flVelocity, length, totalDist, flWidth, life, "effects/human_bullet" ); +} + +DECLARE_CLIENT_EFFECT( "HLaserTracer", HLaserTracerCallback ); + +//----------------------------------------------------------------------------- +// Purpose: Alien's laser rifle Tracer +//----------------------------------------------------------------------------- +void ALaserTracerCallback( const CEffectData &data ) +{ + float flVelocity = data.m_flScale; + Vector vecStart = GetTracerOrigin( data ); + Vector vecEnd = data.m_vOrigin; + Vector shotDir; + + // Get out shot direction and length + VectorSubtract( vecEnd, vecStart, shotDir ); + float totalDist = VectorNormalize( shotDir ); + + // Don't make small tracers + if ( totalDist <= 32 ) + return; + + float length = MAX( 64, random->RandomFloat( 512.0f, 768.0f ) ); + flVelocity = random->RandomFloat( 5000, 7000 ); + float life = ( totalDist + length ) / flVelocity; + float flWidth = random->RandomFloat( 2.0, 3.0 ); + + // Add it + FX_AddDiscreetLine( vecStart, shotDir, flVelocity, length, totalDist, flWidth, life, "effects/alien_laser" ); +} + +DECLARE_CLIENT_EFFECT( "ALaserTracer", ALaserTracerCallback ); + +//----------------------------------------------------------------------------- +// Purpose: Alien's minigun tracer +//----------------------------------------------------------------------------- +void MinigunTracerCallback( const CEffectData &data ) +{ + float flVelocity = data.m_flScale; + Vector vecStart = GetTracerOrigin( data ); + Vector vecEnd = data.m_vOrigin; + Vector shotDir; + + // Get out shot direction and length + VectorSubtract( vecEnd, vecStart, shotDir ); + float totalDist = VectorNormalize( shotDir ); + + // Don't make small tracers + if ( totalDist <= 32 ) + return; + + float length = MAX( 64, random->RandomFloat( 200.0f, 256.0f ) ); + flVelocity = random->RandomFloat( 5000, 7000 ); + float life = ( totalDist + length ) / flVelocity; + float flWidth = random->RandomFloat( 1.5, 2.0 ); + + // Add it + FX_AddDiscreetLine( vecStart, shotDir, flVelocity, length, totalDist, flWidth, life, "effects/alien_laser" ); +} + +DECLARE_CLIENT_EFFECT( "MinigunTracer", MinigunTracerCallback ); |