//----------------------------------------------------------------------------- // Purpose: Fill out a takedamageinfo with a damage force for an explosive //----------------------------------------------------------------------------- void CalculateExplosiveDamageForce( CTakeDamageInfo *info, const Vector &vecDir, const Vector &vecForceOrigin, float flScale ) { info->SetDamagePosition( vecForceOrigin ); float flClampForce = ImpulseScale( 75, 400 ); // Calculate an impulse large enough to push a 75kg man 4 in/sec per point of damage float flForceScale = info->GetBaseDamage() * ImpulseScale( 75, 4 ); if( flForceScale > flClampForce ) flForceScale = flClampForce; // Fudge blast forces a little bit, so that each // victim gets a slightly different trajectory. // This simulates features that usually vary from // person-to-person variables such as bodyweight, // which are all indentical for characters using the same model. flForceScale *= random->RandomFloat( 0.85, 1.15 ); // Calculate the vector and stuff it into the takedamageinfo Vector vecForce = vecDir; VectorNormalize( vecForce ); vecForce *= flForceScale; vecForce *= phys_pushscale.GetFloat(); vecForce *= flScale; info->SetDamageForce( vecForce ); }
//----------------------------------------------------------------------------- // Purpose: Fill out a takedamageinfo with a damage force for a melee impact //----------------------------------------------------------------------------- void CalculateMeleeDamageForce( CTakeDamageInfo *info, const Vector &vecMeleeDir, const Vector &vecForceOrigin, float flScale ) { info->SetDamagePosition( vecForceOrigin ); // Calculate an impulse large enough to push a 75kg man 4 in/sec per point of damage float flForceScale = info->GetBaseDamage() * ImpulseScale( 75, 4 ); Vector vecForce = vecMeleeDir; VectorNormalize( vecForce ); vecForce *= flForceScale; vecForce *= phys_pushscale.GetFloat(); vecForce *= flScale; info->SetDamageForce( vecForce ); }
static int luasrc_ImpulseScale (lua_State *L) { lua_pushnumber(L, ImpulseScale(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; }