From 43d666a2ffdd5814bdc619ef95ab665bf38b4b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Zieli=C5=84ski?= Date: Sun, 25 Jun 2023 18:31:54 +0200 Subject: [PATCH] Refactor duplicated code --- lib/rmg/modificators/ObjectManager.cpp | 20 ++++++++++++-------- lib/rmg/modificators/ObjectManager.h | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/rmg/modificators/ObjectManager.cpp b/lib/rmg/modificators/ObjectManager.cpp index 15a4f890a..5a0a22844 100644 --- a/lib/rmg/modificators/ObjectManager.cpp +++ b/lib/rmg/modificators/ObjectManager.cpp @@ -76,23 +76,27 @@ void ObjectManager::addNearbyObject(CGObjectInstance * obj, CGObjectInstance * n void ObjectManager::updateDistances(const rmg::Object & obj) { - RecursiveLock lock(externalAccessMutex); - tilesByDistance.clear(); - for (auto tile : zone.areaPossible().getTiles()) //don't need to mark distance for not possible tiles + updateDistances([obj](const int3& tile) -> ui32 { - ui32 d = obj.getArea().distanceSqr(tile); //optimization, only relative distance is interesting - map.setNearestObjectDistance(tile, std::min(static_cast(d), map.getNearestObjectDistance(tile))); - tilesByDistance.push(std::make_pair(tile, map.getNearestObjectDistance(tile))); - } + return obj.getArea().distanceSqr(tile); //optimization, only relative distance is interesting + }); } void ObjectManager::updateDistances(const int3 & pos) +{ + updateDistances([pos](const int3& tile) -> ui32 + { + return pos.dist2dSQ(tile); //optimization, only relative distance is interesting + }); +} + +void ObjectManager::updateDistances(std::function distanceFunction) { RecursiveLock lock(externalAccessMutex); tilesByDistance.clear(); for (auto tile : zone.areaPossible().getTiles()) //don't need to mark distance for not possible tiles { - ui32 d = pos.dist2dSQ(tile); //optimization, only relative distance is interesting + ui32 d = distanceFunction(tile); map.setNearestObjectDistance(tile, std::min(static_cast(d), map.getNearestObjectDistance(tile))); tilesByDistance.push(std::make_pair(tile, map.getNearestObjectDistance(tile))); } diff --git a/lib/rmg/modificators/ObjectManager.h b/lib/rmg/modificators/ObjectManager.h index 5e17a3303..402743048 100644 --- a/lib/rmg/modificators/ObjectManager.h +++ b/lib/rmg/modificators/ObjectManager.h @@ -63,6 +63,7 @@ public: void updateDistances(const rmg::Object & obj); void updateDistances(const int3& pos); + void updateDistances(std::function distanceFunction); void createDistancesPriorityQueue(); const rmg::Area & getVisitableArea() const;