aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/physics_impact_damage.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/server/physics_impact_damage.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/server/physics_impact_damage.h')
-rw-r--r--mp/src/game/server/physics_impact_damage.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/mp/src/game/server/physics_impact_damage.h b/mp/src/game/server/physics_impact_damage.h
new file mode 100644
index 00000000..40183c75
--- /dev/null
+++ b/mp/src/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