void PerformCustomEffects( const Vector &vecOrigin, trace_t &tr, const Vector &shotDir, int iMaterial, int iScale, int nFlags ) { // Throw out the effect if any of these are true if ( tr.surface.flags & (SURF_SKY|SURF_NODRAW|SURF_HINT|SURF_SKIP) ) return; if ( cl_new_impact_effects.GetInt() ) { PerformNewCustomEffects( vecOrigin, tr, shotDir, iMaterial, iScale, nFlags ); return; } bool bNoFlecks = !r_drawflecks.GetBool(); if ( !bNoFlecks ) { bNoFlecks = ( ( nFlags & FLAGS_CUSTIOM_EFFECTS_NOFLECKS ) != 0 ); } // Cement and wood have dust and flecks if ( ( iMaterial == CHAR_TEX_CONCRETE ) || ( iMaterial == CHAR_TEX_TILE ) ) { FX_DebrisFlecks( vecOrigin, &tr, iMaterial, iScale, bNoFlecks ); } else if ( iMaterial == CHAR_TEX_WOOD ) { FX_DebrisFlecks( vecOrigin, &tr, iMaterial, iScale, bNoFlecks ); } else if ( ( iMaterial == CHAR_TEX_DIRT ) || ( iMaterial == CHAR_TEX_SAND ) ) { FX_DustImpact( vecOrigin, &tr, iScale ); } else if ( iMaterial == CHAR_TEX_ANTLION ) { FX_AntlionImpact( vecOrigin, &tr ); } else if ( ( iMaterial == CHAR_TEX_METAL ) || ( iMaterial == CHAR_TEX_VENT ) ) { Vector reflect; float dot = shotDir.Dot( tr.plane.normal ); reflect = shotDir + ( tr.plane.normal * ( dot*-2.0f ) ); reflect[0] += random->RandomFloat( -0.2f, 0.2f ); reflect[1] += random->RandomFloat( -0.2f, 0.2f ); reflect[2] += random->RandomFloat( -0.2f, 0.2f ); FX_MetalSpark( vecOrigin, reflect, tr.plane.normal, iScale ); } else if ( iMaterial == CHAR_TEX_COMPUTER ) { Vector offset = vecOrigin + ( tr.plane.normal * 1.0f ); g_pEffects->Sparks( offset ); } else if ( iMaterial == CHAR_TEX_WARPSHIELD ) { QAngle vecAngles; VectorAngles( -shotDir, vecAngles ); DispatchParticleEffect( "warp_shield_impact", vecOrigin, vecAngles ); } }
//----------------------------------------------------------------------------- // Purpose: Perform custom effects based on the Decal index //----------------------------------------------------------------------------- void PerformCustomEffects( Vector &vecOrigin, trace_t &tr, Vector &shotDir, int iMaterial, int iScale ) { // Throw out the effect if any of these are true if ( tr.surface.flags & (SURF_SKY|SURF_NODRAW|SURF_HINT|SURF_SKIP) ) return; // Cement and wood have dust and flecks if ( iMaterial == CHAR_TEX_CONCRETE ) { FX_DebrisFlecks( vecOrigin, &tr, iMaterial, iScale ); } else if ( iMaterial == CHAR_TEX_WOOD ) { FX_DebrisFlecks( vecOrigin, &tr, iMaterial, iScale ); } else if ( iMaterial == CHAR_TEX_DIRT ) { FX_DustImpact( vecOrigin, &tr, iScale ); } else if ( iMaterial == CHAR_TEX_ANTLION ) { FX_AntlionImpact( vecOrigin, &tr ); } else if ( iMaterial == CHAR_TEX_METAL ) { Vector reflect; float dot = shotDir.Dot( tr.plane.normal ); reflect = shotDir + ( tr.plane.normal * ( dot*-2.0f ) ); reflect[0] += random->RandomFloat( -0.2f, 0.2f ); reflect[1] += random->RandomFloat( -0.2f, 0.2f ); reflect[2] += random->RandomFloat( -0.2f, 0.2f ); FX_MetalSpark( vecOrigin, reflect, iScale ); } else if ( iMaterial == CHAR_TEX_COMPUTER ) { Vector offset = vecOrigin + ( tr.plane.normal * 1.0f ); g_pEffects->Sparks( offset ); } //--------------------------- // Do leak effect //--------------------------- LeakEffect(tr); }