sdk/extensions/physx/include/NvBlastExtImpactDamageManager.h

Go to the documentation of this file.
00001 // This code contains NVIDIA Confidential Information and is disclosed to you
00002 // under a form of NVIDIA software license agreement provided separately to you.
00003 //
00004 // Notice
00005 // NVIDIA Corporation and its licensors retain all intellectual property and
00006 // proprietary rights in and to this software and related documentation and
00007 // any modifications thereto. Any use, reproduction, disclosure, or
00008 // distribution of this software and related documentation without an express
00009 // license agreement from NVIDIA Corporation is strictly prohibited.
00010 //
00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
00015 //
00016 // Information and code furnished is believed to be accurate and reliable.
00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
00018 // information or for any infringement of patents or other rights of third parties that may
00019 // result from its use. No license is granted by implication or otherwise under any patent
00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice.
00021 // This code supersedes and replaces all information previously supplied.
00022 // NVIDIA Corporation products are not authorized for use as critical
00023 // components in life support devices or systems without express written approval of
00024 // NVIDIA Corporation.
00025 //
00026 // Copyright (c) 2016-2020 NVIDIA Corporation. All rights reserved.
00027 
00028 
00029 #ifndef NVBLASTEXTIMPACTDAMAGEMANAGER_H
00030 #define NVBLASTEXTIMPACTDAMAGEMANAGER_H
00031 
00032 #include "PxFiltering.h"
00033 #include "NvPreprocessor.h"
00034 
00035 // Forward declarations
00036 namespace physx
00037 {
00038 struct PxContactPair;
00039 struct PxContactPairHeader;
00040 }
00041 
00042 
00043 namespace Nv
00044 {
00045 namespace Blast
00046 {
00047 
00048 // Forward declarations
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), // to filter small damage events
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 } // namespace Blast
00168 } // namespace Nv
00169 
00170 
00171 #endif // ifndef NVBLASTEXTIMPACTDAMAGEMANAGER_H