00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef NVBLASTEXTIMPACTDAMAGEMANAGER_H
00030 #define NVBLASTEXTIMPACTDAMAGEMANAGER_H
00031
00032 #include "PxFiltering.h"
00033 #include "NvPreprocessor.h"
00034
00035
00036 namespace physx
00037 {
00038 struct PxContactPair;
00039 struct PxContactPairHeader;
00040 }
00041
00042
00043 namespace Nv
00044 {
00045 namespace Blast
00046 {
00047
00048
00049 class ExtPxActor;
00050 class ExtPxManager;
00051
00052
00056 typedef bool(*ExtImpactDamageFunction)(void* data, ExtPxActor* actor, physx::PxShape* shape, physx::PxVec3 worldPos, physx::PxVec3 worldForce);
00057
00058
00062 struct ExtImpactSettings
00063 {
00064 bool isSelfCollissionEnabled;
00065 bool shearDamage;
00066 float hardness;
00067 float damageRadiusMax;
00068 float damageThresholdMin;
00069 float damageThresholdMax;
00070 float damageFalloffRadiusFactor;
00071 ExtImpactDamageFunction damageFunction;
00072 void* damageFunctionData;
00073
00074
00075 ExtImpactSettings() :
00076 isSelfCollissionEnabled(false),
00077 shearDamage(true),
00078 hardness(10.0f),
00079 damageRadiusMax(2.0f),
00080 damageThresholdMin(0.1f),
00081 damageThresholdMax(1.0f),
00082 damageFalloffRadiusFactor(2.0f),
00083 damageFunction(nullptr),
00084 damageFunctionData(nullptr)
00085 {}
00086 };
00087
00088
00096 class NV_DLL_EXPORT ExtImpactDamageManager
00097 {
00098 public:
00100
00109 static ExtImpactDamageManager* create(ExtPxManager* pxManager, ExtImpactSettings settings = ExtImpactSettings());
00110
00114 virtual void release() = 0;
00115
00116
00118
00124 virtual void setSettings(const ExtImpactSettings& settings) = 0;
00125
00139 virtual void onContact(const physx::PxContactPairHeader& pairHeader, const physx::PxContactPair* pairs, uint32_t nbPairs) = 0;
00140
00141
00145 virtual void applyDamage() = 0;
00146
00147
00149
00156 static physx::PxFilterFlags FilterShader(
00157 physx::PxFilterObjectAttributes attributes0,
00158 physx::PxFilterData filterData0,
00159 physx::PxFilterObjectAttributes attributes1,
00160 physx::PxFilterData filterData1,
00161 physx::PxPairFlags& pairFlags,
00162 const void* constantBlock,
00163 uint32_t constantBlockSize);
00164
00165 };
00166
00167 }
00168 }
00169
00170
00171 #endif // ifndef NVBLASTEXTIMPACTDAMAGEMANAGER_H