From 41b02ff1aa9a4f07d0ef61d79a9c9521d4709df8 Mon Sep 17 00:00:00 2001 From: elsid Date: Wed, 4 Aug 2021 18:35:25 +0200 Subject: [PATCH] Copy only required RecastMeshObject fields --- .../detournavigator/recastmeshmanager.cpp | 17 +++++++++++++---- components/detournavigator/recastmeshobject.hpp | 5 +++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/components/detournavigator/recastmeshmanager.cpp b/components/detournavigator/recastmeshmanager.cpp index 5bbbbe4dea..e4e5b76449 100644 --- a/components/detournavigator/recastmeshmanager.cpp +++ b/components/detournavigator/recastmeshmanager.cpp @@ -123,7 +123,13 @@ namespace DetourNavigator tileBounds.mMin /= mSettings.mRecastScaleFactor; tileBounds.mMax /= mSettings.mRecastScaleFactor; RecastMeshBuilder builder(tileBounds); - std::vector objects; + using Object = std::tuple< + osg::ref_ptr, + std::reference_wrapper, + btTransform, + AreaType + >; + std::vector objects; std::size_t revision; { const std::lock_guard lock(mMutex); @@ -133,11 +139,14 @@ namespace DetourNavigator std::visit(AddHeightfield {v.mCell, builder}, v.mShape); objects.reserve(mObjects.size()); for (const auto& [k, object] : mObjects) - objects.push_back(object.getImpl()); + { + const RecastMeshObject& impl = object.getImpl(); + objects.emplace_back(impl.getHolder(), impl.getShape(), impl.getTransform(), impl.getAreaType()); + } revision = mRevision; } - for (const auto& v : objects) - builder.addObject(v.getShape(), v.getTransform(), v.getAreaType()); + for (const auto& [holder, shape, transform, areaType] : objects) + builder.addObject(shape, transform, areaType); return std::move(builder).create(mGeneration, revision); } diff --git a/components/detournavigator/recastmeshobject.hpp b/components/detournavigator/recastmeshobject.hpp index 445dfe50f5..0c50c2f346 100644 --- a/components/detournavigator/recastmeshobject.hpp +++ b/components/detournavigator/recastmeshobject.hpp @@ -39,6 +39,11 @@ namespace DetourNavigator bool update(const btTransform& transform, const AreaType areaType); + const osg::ref_ptr& getHolder() const + { + return mHolder; + } + const btCollisionShape& getShape() const { return mShape;