| 1 | //************************************ bs::framework - Copyright 2018 Marko Pintera **************************************// |
| 2 | //*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********// |
| 3 | #pragma once |
| 4 | |
| 5 | #include "BsCorePrerequisites.h" |
| 6 | #include "foundation/PxVec3.h" |
| 7 | #include "foundation/PxVec4.h" |
| 8 | #include "foundation/PxQuat.h" |
| 9 | #include "foundation/PxTransform.h" |
| 10 | |
| 11 | namespace bs |
| 12 | { |
| 13 | /** @addtogroup Plugins |
| 14 | * @{ |
| 15 | */ |
| 16 | |
| 17 | /** @defgroup PhysX bsfPhysX |
| 18 | * NVIDIA %PhysX implementation of framework's physics. |
| 19 | * @{ |
| 20 | */ |
| 21 | |
| 22 | /** @cond RTTI */ |
| 23 | /** @defgroup RTTI-Impl-PhysX RTTI types |
| 24 | * Types containing RTTI for specific classes. |
| 25 | */ |
| 26 | /** @endcond */ |
| 27 | |
| 28 | /** @} */ |
| 29 | /** @} */ |
| 30 | |
| 31 | class PhysXRigidbody; |
| 32 | class PhsyXMaterial; |
| 33 | class FPhysXCollider; |
| 34 | |
| 35 | /** @addtogroup PhysX |
| 36 | * @{ |
| 37 | */ |
| 38 | |
| 39 | /** Type IDs used by the RTTI system for the PhysX library. */ |
| 40 | enum TypeID_PhysX |
| 41 | { |
| 42 | TID_FPhysXMesh = 100000, |
| 43 | }; |
| 44 | |
| 45 | /** Converts a framework vector to a PhysX vector. */ |
| 46 | inline const physx::PxVec3& toPxVector(const Vector3& input) |
| 47 | { |
| 48 | return *(physx::PxVec3*)&input; |
| 49 | } |
| 50 | |
| 51 | /** Converts a framework vector to a PhysX vector. */ |
| 52 | inline const physx::PxVec4& toPxVector(const Vector4& input) |
| 53 | { |
| 54 | return *(physx::PxVec4*)&input; |
| 55 | } |
| 56 | |
| 57 | /** Converts a framework quaternion to a PhysX quaternion. */ |
| 58 | inline const physx::PxQuat& toPxQuaternion(const Quaternion& input) |
| 59 | { |
| 60 | return *(physx::PxQuat*)&input; |
| 61 | } |
| 62 | |
| 63 | /** Converts a framework position/rotation pair to a PhysX transform. */ |
| 64 | inline physx::PxTransform toPxTransform(const Vector3& pos, const Quaternion& rot) |
| 65 | { |
| 66 | return physx::PxTransform(toPxVector(pos), toPxQuaternion(rot)); |
| 67 | } |
| 68 | |
| 69 | /** Converts a PhysX vector to framework's vector. */ |
| 70 | inline const Vector3& fromPxVector(const physx::PxVec3& input) |
| 71 | { |
| 72 | return *(Vector3*)&input; |
| 73 | } |
| 74 | |
| 75 | /** Converts a PhysX vector to framework's vector. */ |
| 76 | inline const Vector4& fromPxVector(const physx::PxVec4& input) |
| 77 | { |
| 78 | return *(Vector4*)&input; |
| 79 | } |
| 80 | |
| 81 | /** Converts a PhysX quaternion to framework's quaternion. */ |
| 82 | inline const Quaternion& fromPxQuaternion(const physx::PxQuat& input) |
| 83 | { |
| 84 | return *(Quaternion*)&input; |
| 85 | } |
| 86 | |
| 87 | /** Flags used on PhysX shape filters. */ |
| 88 | enum class PhysXObjectFilterFlag |
| 89 | { |
| 90 | NoReport = 1 << 0, /**< Don't report collision events. */ |
| 91 | ReportBasic = 1 << 1, /**< Report start/begin collision events. */ |
| 92 | ReportAll = 1 << 2, /**< Report start/begin, as well as persistant collision events. */ |
| 93 | CCD = 1 << 3 /**< Use continous collision detection for this shape. */ |
| 94 | }; |
| 95 | |
| 96 | /** @copydoc PhysXObjectFilterFlag */ |
| 97 | typedef Flags<PhysXObjectFilterFlag> PhysXObjectFilterFlags; |
| 98 | BS_FLAGS_OPERATORS(PhysXObjectFilterFlag) |
| 99 | |
| 100 | /** @} */ |
| 101 | } |