void FX_Tracer( Vector& start, Vector& end, int velocity, bool makeWhiz ) { VPROF_BUDGET( "FX_Tracer", VPROF_BUDGETGROUP_PARTICLE_RENDERING ); //Don't make small tracers float dist; Vector dir; VectorSubtract( end, start, dir ); dist = VectorNormalize( dir ); // Don't make short tracers. if ( dist >= 256 ) { 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" ); } if( makeWhiz ) { FX_TracerSound( start, end, TRACER_TYPE_DEFAULT ); } }
//----------------------------------------------------------------------------- // Purpose: // Input : start - // end - // velocity - // makeWhiz - //----------------------------------------------------------------------------- void FX_HunterTracer( Vector& start, Vector& end, int velocity, bool makeWhiz ) { VPROF_BUDGET( "FX_HunterTracer", VPROF_BUDGETGROUP_PARTICLE_RENDERING ); Vector vNear, dStart, dEnd, shotDir; float totalDist; // Get out shot direction and length VectorSubtract( end, start, shotDir ); totalDist = VectorNormalize( shotDir ); // Make short tracers in close quarters // float flMinLength = MIN( totalDist, 128.0f ); // float flMaxLength = MIN( totalDist, 128.0f ); float length = 128.0f;//random->RandomFloat( flMinLength, flMaxLength ); float life = ( totalDist + length ) / velocity; // NOTENOTE: We want the tail to finish its run as well // Add it FX_AddDiscreetLine( start, shotDir, velocity*0.5f, length, totalDist, 2.0f, life, "effects/huntertracer" ); if( makeWhiz ) { FX_TracerSound( start, end, TRACER_TYPE_STRIDER ); } }
//----------------------------------------------------------------------------- // Purpose: // Input : start - // end - // velocity - // makeWhiz - //----------------------------------------------------------------------------- void FX_StriderTracer( Vector& start, Vector& end, int velocity, bool makeWhiz ) { VPROF_BUDGET( "FX_StriderTracer", VPROF_BUDGETGROUP_PARTICLE_RENDERING ); Vector vNear, dStart, dEnd, shotDir; float totalDist; //Get out shot direction and length VectorSubtract( end, start, shotDir ); totalDist = VectorNormalize( shotDir ); //Don't make small tracers if ( totalDist <= 256 ) return; float length = random->RandomFloat( 64.0f, 128.0f ); float life = ( totalDist + length ) / velocity; //NOTENOTE: We want the tail to finish its run as well //Add it FX_AddDiscreetLine( start, shotDir, velocity, length, totalDist, 2.5f, life, "effects/gunshiptracer" ); if( makeWhiz ) { FX_TracerSound( start, end, TRACER_TYPE_STRIDER ); } }
//----------------------------------------------------------------------------- // Purpose: Airboat gun tracers //----------------------------------------------------------------------------- void HelicopterTracerCallback( const CEffectData &data ) { // Grab the data Vector vecStart = GetTracerOrigin( data ); float flVelocity = data.m_flScale; // Use default velocity if none specified if ( !flVelocity ) { flVelocity = 8000; } //Get out shot direction and length Vector vecShotDir; VectorSubtract( data.m_vOrigin, vecStart, vecShotDir ); float flTotalDist = VectorNormalize( vecShotDir ); // Don't make small tracers if ( flTotalDist <= 256 ) return; float flLength = random->RandomFloat( 256.0f, 384.0f ); float flLife = ( flTotalDist + flLength ) / flVelocity; //NOTENOTE: We want the tail to finish its run as well // Add it FX_AddDiscreetLine( vecStart, vecShotDir, flVelocity, flLength, flTotalDist, 5.0f, flLife, "effects/gunshiptracer" ); if (data.m_fFlags & TRACER_FLAG_WHIZ) { FX_TracerSound( vecStart, data.m_vOrigin, TRACER_TYPE_GUNSHIP ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void TracerSoundCallback( const CEffectData &data ) { // Grab the data Vector vecStart = GetTracerOrigin( data ); // Do tracer effect FX_TracerSound( vecStart, (Vector&)data.m_vOrigin, data.m_fFlags ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void ParticleTracerCallback( const CEffectData &data ) { C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if ( !player ) return; // Grab the data Vector vecStart = GetTracerOrigin( data ); Vector vecEnd = data.m_vOrigin; // Adjust view model tracers C_BaseEntity *pEntity = data.GetEntity(); if ( data.entindex() && data.entindex() == player->index ) { QAngle vangles; Vector vforward, vright, vup; engine->GetViewAngles( vangles ); AngleVectors( vangles, &vforward, &vright, &vup ); VectorMA( data.m_vStart, 4, vright, vecStart ); vecStart[2] -= 0.5f; } // Create the particle effect QAngle vecAngles; Vector vecToEnd = vecEnd - vecStart; VectorNormalize(vecToEnd); VectorAngles( vecToEnd, vecAngles ); DispatchParticleEffect( data.m_nHitBox, vecStart, vecEnd, vecAngles, pEntity ); if ( data.m_fFlags & TRACER_FLAG_WHIZ ) { FX_TracerSound( vecStart, vecEnd, TRACER_TYPE_DEFAULT ); } }