JoltPhysics3D/JoltPhysWorld3D: Add CollisionQuery for points and shapes

This commit is contained in:
SirLynix
2023-12-07 16:49:48 +01:00
parent 26dbdef50d
commit 3fd696385d
4 changed files with 233 additions and 10 deletions

View File

@@ -40,13 +40,19 @@ namespace Nz
friend JoltRigidBody3D;
public:
struct PointCollisionInfo;
struct RaycastHit;
struct ShapeCollisionInfo;
JoltPhysWorld3D();
JoltPhysWorld3D(const JoltPhysWorld3D&) = delete;
JoltPhysWorld3D(JoltPhysWorld3D&& ph) = delete;
~JoltPhysWorld3D();
bool CollisionQuery(const Vector3f& point, const FunctionRef<std::optional<float>(const PointCollisionInfo& collisionInfo)>& callback);
bool CollisionQuery(const JoltCollider3D& collider, const Matrix4f& colliderTransform, const FunctionRef<std::optional<float>(const ShapeCollisionInfo& hitInfo)>& callback);
bool CollisionQuery(const JoltCollider3D& collider, const Matrix4f& colliderTransform, const Vector3f& colliderScale, const FunctionRef<std::optional<float>(const ShapeCollisionInfo& hitInfo)>& callback);
UInt32 GetActiveBodyCount() const;
Vector3f GetGravity() const;
std::size_t GetMaxStepCount() const;
@@ -74,6 +80,11 @@ namespace Nz
JoltPhysWorld3D& operator=(const JoltPhysWorld3D&) = delete;
JoltPhysWorld3D& operator=(JoltPhysWorld3D&&) = delete;
struct PointCollisionInfo
{
JoltAbstractBody* hitBody = nullptr;
};
struct RaycastHit
{
float fraction;
@@ -82,6 +93,15 @@ namespace Nz
Vector3f hitPosition;
};
struct ShapeCollisionInfo
{
JoltAbstractBody* hitBody = nullptr;
Vector3f collisionPosition1;
Vector3f collisionPosition2;
Vector3f penetrationAxis;
float penetrationDepth;
};
private:
class BodyActivationListener;
friend BodyActivationListener;