You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.2 KiB
66 lines
2.2 KiB
//========= 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
|
|
|