diff --git a/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.cpp b/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.cpp index fc1c1255566d..3852e42d51f2 100644 --- a/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.cpp +++ b/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.cpp @@ -76,7 +76,7 @@ bool JoltPhysicsDirectSpaceState3D::_cast_motion_impl(const JPH::Shape &p_jolt_s aabb_translated.Translate(motion); aabb.Encapsulate(aabb_translated); - JoltQueryCollectorAnyMulti aabb_collector; + JoltQueryCollectorAnyMulti aabb_collector; space->get_broad_phase_query().CollideAABox(aabb, aabb_collector, p_broad_phase_layer_filter, p_object_layer_filter); if (!aabb_collector.had_hit()) { diff --git a/modules/jolt_physics/spaces/jolt_query_collectors.h b/modules/jolt_physics/spaces/jolt_query_collectors.h index 5eaac2cd6bb8..907419c8b633 100644 --- a/modules/jolt_physics/spaces/jolt_query_collectors.h +++ b/modules/jolt_physics/spaces/jolt_query_collectors.h @@ -34,10 +34,9 @@ #include "../jolt_project_settings.h" #include "jolt_space_3d.h" -#include "core/templates/local_vector.h" - #include "Jolt/Jolt.h" +#include "Jolt/Core/STLLocalAllocator.h" #include "Jolt/Physics/Collision/InternalEdgeRemovingCollector.h" #include "Jolt/Physics/Collision/Shape/Shape.h" @@ -45,11 +44,16 @@ template class JoltQueryCollectorAll final : public TBase { public: typedef typename TBase::ResultType Hit; + typedef JPH::Array> HitArray; private: - JPH::Array hits; + HitArray hits; public: + JoltQueryCollectorAll() { + hits.reserve(TDefaultCapacity); + } + bool had_hit() const { return !hits.is_empty(); } @@ -109,14 +113,17 @@ template class JoltQueryCollectorAnyMulti final : public TBase { public: typedef typename TBase::ResultType Hit; + typedef JPH::Array> HitArray; private: - JPH::Array hits; + HitArray hits; int max_hits = 0; public: explicit JoltQueryCollectorAnyMulti(int p_max_hits = TDefaultCapacity) : - max_hits(p_max_hits) {} + max_hits(p_max_hits) { + hits.reserve(TDefaultCapacity); + } bool had_hit() const { return hits.size() > 0; @@ -189,14 +196,17 @@ template class JoltQueryCollectorClosestMulti final : public TBase { public: typedef typename TBase::ResultType Hit; + typedef JPH::Array> HitArray; private: - JPH::Array hits; + HitArray hits; int max_hits = 0; public: explicit JoltQueryCollectorClosestMulti(int p_max_hits = TDefaultCapacity) : - max_hits(p_max_hits) {} + max_hits(p_max_hits) { + hits.reserve(TDefaultCapacity + 1); + } bool had_hit() const { return hits.size() > 0; @@ -220,7 +230,7 @@ class JoltQueryCollectorClosestMulti final : public TBase { } virtual void AddHit(const Hit &p_hit) override { - typename JPH::Array::const_iterator E = hits.cbegin(); + typename HitArray::const_iterator E = hits.cbegin(); for (; E != hits.cend(); ++E) { if (p_hit.GetEarlyOutFraction() < E->GetEarlyOutFraction()) { break;