Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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
|