void PhysFrictionEffect( Vector &vecPos, Vector vecVel, float energy, int surfaceProps, int surfacePropsHit ) { Vector invVecVel = -vecVel; VectorNormalize( invVecVel ); surfacedata_t *psurf = physprops->GetSurfaceData( surfaceProps ); surfacedata_t *phit = physprops->GetSurfaceData( surfacePropsHit ); switch ( phit->game.material ) { case CHAR_TEX_DIRT: if ( energy < MASS10_SPEED2ENERGY(15) ) break; //iosdust - remove dust effect //g_pEffects->Dust( vecPos, invVecVel, 1, 16 ); break; case CHAR_TEX_CONCRETE: if ( energy < MASS10_SPEED2ENERGY(28) ) break; //iosdust - remove dust effect //g_pEffects->Dust( vecPos, invVecVel, 1, 16 ); break; } //Metal sparks if ( energy > MASS10_SPEED2ENERGY(50) ) { // make sparks for metal/concrete scrapes with enough energy if ( psurf->game.material == CHAR_TEX_METAL || psurf->game.material == CHAR_TEX_GRATE ) { switch ( phit->game.material ) { case CHAR_TEX_CONCRETE: case CHAR_TEX_METAL: g_pEffects->MetalSparks( vecPos, invVecVel ); break; } } } }
void PhysFrictionEffect( Vector &vecPos, Vector vecVel, float energy, int surfaceProps, int surfacePropsHit ) { QAngle angDirection; VectorAngles( vecVel, angDirection ); surfacedata_t *psurf = physprops->GetSurfaceData( surfaceProps ); surfacedata_t *phit = physprops->GetSurfaceData( surfacePropsHit ); switch ( phit->game.material ) { case CHAR_TEX_DIRT: if ( energy < MASS10_SPEED2ENERGY(15) ) break; DispatchParticleEffect( "impact_physics_dust", vecPos, angDirection ); break; case CHAR_TEX_CONCRETE: if ( energy < MASS10_SPEED2ENERGY(28) ) break; DispatchParticleEffect( "impact_physics_dust", vecPos, angDirection ); break; } //Metal sparks if ( energy > MASS10_SPEED2ENERGY(50) ) { // make sparks for metal/concrete scrapes with enough energy if ( psurf->game.material == CHAR_TEX_METAL || psurf->game.material == CHAR_TEX_GRATE ) { switch ( phit->game.material ) { case CHAR_TEX_CONCRETE: case CHAR_TEX_METAL: DispatchParticleEffect( "impact_physics_sparks", vecPos, angDirection ); break; } } } }