diff --git a/modules/jolt_physics/objects/jolt_area_3d.cpp b/modules/jolt_physics/objects/jolt_area_3d.cpp index e87a6e4cbc..674c151faa 100644 --- a/modules/jolt_physics/objects/jolt_area_3d.cpp +++ b/modules/jolt_physics/objects/jolt_area_3d.cpp @@ -57,6 +57,11 @@ JPH::BroadPhaseLayer JoltArea3D::_get_broad_phase_layer() const { JPH::ObjectLayer JoltArea3D::_get_object_layer() const { ERR_FAIL_NULL_V(space, 0); + if (jolt_shape == nullptr || jolt_shape->GetType() == JPH::EShapeType::Empty) { + // No point doing collision checks against a shapeless object. + return space->map_to_object_layer(_get_broad_phase_layer(), 0, 0); + } + return space->map_to_object_layer(_get_broad_phase_layer(), collision_layer, collision_mask); } diff --git a/modules/jolt_physics/objects/jolt_body_3d.cpp b/modules/jolt_physics/objects/jolt_body_3d.cpp index 1d040e971b..30c1f641d7 100644 --- a/modules/jolt_physics/objects/jolt_body_3d.cpp +++ b/modules/jolt_physics/objects/jolt_body_3d.cpp @@ -93,6 +93,11 @@ JPH::BroadPhaseLayer JoltBody3D::_get_broad_phase_layer() const { JPH::ObjectLayer JoltBody3D::_get_object_layer() const { ERR_FAIL_NULL_V(space, 0); + if (jolt_shape == nullptr || jolt_shape->GetType() == JPH::EShapeType::Empty) { + // No point doing collision checks against a shapeless object. + return space->map_to_object_layer(_get_broad_phase_layer(), 0, 0); + } + return space->map_to_object_layer(_get_broad_phase_layer(), collision_layer, collision_mask); } diff --git a/modules/jolt_physics/objects/jolt_shaped_object_3d.cpp b/modules/jolt_physics/objects/jolt_shaped_object_3d.cpp index 9ac43699d8..1e42dff8de 100644 --- a/modules/jolt_physics/objects/jolt_shaped_object_3d.cpp +++ b/modules/jolt_physics/objects/jolt_shaped_object_3d.cpp @@ -167,6 +167,9 @@ void JoltShapedObject3D::_dequeue_needs_optimization() { void JoltShapedObject3D::_shapes_changed() { commit_shapes(false); +} + +void JoltShapedObject3D::_shapes_committed() { _update_object_layer(); } diff --git a/modules/jolt_physics/objects/jolt_shaped_object_3d.h b/modules/jolt_physics/objects/jolt_shaped_object_3d.h index 403c1a59fe..6cf4b7e675 100644 --- a/modules/jolt_physics/objects/jolt_shaped_object_3d.h +++ b/modules/jolt_physics/objects/jolt_shaped_object_3d.h @@ -68,7 +68,7 @@ protected: void _dequeue_needs_optimization(); virtual void _shapes_changed(); - virtual void _shapes_committed() {} + virtual void _shapes_committed(); virtual void _space_changing() override; public: