Main Page Class List Class Members

# 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