From 1f68cfa6c2757aad7c81ef0b92e394855fc3acab Mon Sep 17 00:00:00 2001 From: SirLynix Date: Fri, 10 Mar 2023 13:23:14 +0100 Subject: [PATCH] Physics3D/Collider3D: Use btEmptyShape for NullCollider3D Having no collider seems to break physics --- include/Nazara/Physics3D/Collider3D.hpp | 8 ++++++-- src/Nazara/Physics3D/Collider3D.cpp | 10 +++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/include/Nazara/Physics3D/Collider3D.hpp b/include/Nazara/Physics3D/Collider3D.hpp index 96fdb19ad..aed30628e 100644 --- a/include/Nazara/Physics3D/Collider3D.hpp +++ b/include/Nazara/Physics3D/Collider3D.hpp @@ -25,6 +25,7 @@ class btCollisionShape; class btConeShape; class btConvexHullShape; class btCylinderShape; +class btEmptyShape; class btSphereShape; namespace Nz @@ -179,8 +180,8 @@ namespace Nz class NAZARA_PHYSICS3D_API NullCollider3D final : public Collider3D { public: - NullCollider3D() = default; - ~NullCollider3D() = default; + NullCollider3D(); + ~NullCollider3D(); void BuildDebugMesh(std::vector& vertices, std::vector& indices, const Matrix4f& offsetMatrix) const override; @@ -188,6 +189,9 @@ namespace Nz btCollisionShape* GetShape() const override; ColliderType3D GetType() const override; + + private: + std::unique_ptr m_shape; }; class NAZARA_PHYSICS3D_API SphereCollider3D final : public Collider3D diff --git a/src/Nazara/Physics3D/Collider3D.cpp b/src/Nazara/Physics3D/Collider3D.cpp index c9d9c263b..cc69f1004 100644 --- a/src/Nazara/Physics3D/Collider3D.cpp +++ b/src/Nazara/Physics3D/Collider3D.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -371,6 +372,13 @@ namespace Nz /********************************* NullCollider3D **********************************/ + NullCollider3D::NullCollider3D() + { + m_shape = std::make_unique(); + } + + NullCollider3D::~NullCollider3D() = default; + void NullCollider3D::BuildDebugMesh(std::vector& /*vertices*/, std::vector& /*indices*/, const Matrix4f& /*offsetMatrix*/) const { } @@ -382,7 +390,7 @@ namespace Nz btCollisionShape* NullCollider3D::GetShape() const { - return nullptr; + return m_shape.get(); } ColliderType3D NullCollider3D::GetType() const