diff options
Diffstat (limited to 'game/server/physics_impact_damage.h')
| -rw-r--r-- | game/server/physics_impact_damage.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/game/server/physics_impact_damage.h b/game/server/physics_impact_damage.h new file mode 100644 index 0000000..2bd46a1 --- /dev/null +++ b/game/server/physics_impact_damage.h @@ -0,0 +1,66 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef PHYSICS_IMPACT_DAMAGE_H +#define PHYSICS_IMPACT_DAMAGE_H +#ifdef _WIN32 +#pragma once +#endif + + +struct impactentry_t +{ + float impulse; + float damage; +}; + +// UNDONE: Add a flag to turn off aggregation of mass in object systems (e.g. ragdolls, vehicles)? +struct impactdamagetable_t +{ + impactentry_t *linearTable; + impactentry_t *angularTable; + int linearCount; // array size of linearTable + int angularCount; // array size of angularTable + + float minSpeedSqr; // minimum squared impact speed for damage + float minRotSpeedSqr; + float minMass; // minimum mass to do damage + + // filter out reall small objects, set all to zero to disable + float smallMassMax; + float smallMassCap; + float smallMassMinSpeedSqr; + + // exaggerate the effects of really large objects, set all to 1 to disable + float largeMassMin; + float largeMassScale; + float largeMassFallingScale; // emphasize downward impacts so that this will kill instead of stress (we have more information here than there) + float myMinVelocity; // filter out any energy lost by me unless my velocity is greater than this +}; + + + +extern impactdamagetable_t gDefaultNPCImpactDamageTable; +extern impactdamagetable_t gDefaultPlayerImpactDamageTable; +extern impactdamagetable_t gDefaultPlayerVehicleImpactDamageTable; + +// NOTE Default uses default NPC table +float CalculateDefaultPhysicsDamage( int index, gamevcollisionevent_t *pEvent, float energyScale, bool allowStaticDamage, int &damageTypeOut, string_t iszDamageTableName = NULL_STRING, bool bDamageFromHeldObjects = false ); + +// use passes in the table +float CalculatePhysicsImpactDamage( int index, gamevcollisionevent_t *pEvent, const impactdamagetable_t &table, float energyScale, bool allowStaticDamage, int &damageTypeOut, bool bDamageFromHeldObjects = false ); + +struct vphysics_objectstress_t +{ + float exertedStress; + float receivedStress; + bool hasNonStaticStress; + bool hasLargeObjectContact; +}; + +float CalculateObjectStress( IPhysicsObject *pObject, CBaseEntity *pOwnerEntity, vphysics_objectstress_t *pOutput ); + +#endif // PHYSICS_IMPACT_DAMAGE_H |