//----------------------------------------------------------------------------- // Purpose: Airboat gun tracers //----------------------------------------------------------------------------- void AirboatGunHeavyTracerCallback( 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 <= 64 ) return; float flLength = random->RandomFloat( 300.0f, 400.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" ); }
//----------------------------------------------------------------------------- // 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 AR2TracerCallback( const CEffectData &data ) { C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if ( player == NULL ) return; // Grab the data Vector vecStart = GetTracerOrigin( data ); float flVelocity = data.m_flScale; bool bWhiz = (data.m_fFlags & TRACER_FLAG_WHIZ); int iEntIndex = data.entindex(); if ( iEntIndex && iEntIndex == player->index ) { Vector foo = data.m_vStart; QAngle vangles; Vector vforward, vright, vup; engine->GetViewAngles( vangles ); AngleVectors( vangles, &vforward, &vright, &vup ); VectorMA( data.m_vStart, 4, vright, foo ); foo[2] -= 0.5f; FX_PlayerAR2Tracer( foo, (Vector&)data.m_vOrigin ); return; } // Use default velocity if none specified if ( !flVelocity ) { flVelocity = 8000; } // Do tracer effect FX_AR2Tracer( (Vector&)vecStart, (Vector&)data.m_vOrigin, flVelocity, bWhiz ); }
//----------------------------------------------------------------------------- // 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 ); } }