1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

Refactor duplicated code

This commit is contained in:
Tomasz Zieliński
2023-06-25 18:31:54 +02:00
parent a5ddc225ac
commit 43d666a2ff
2 changed files with 13 additions and 8 deletions

View File

@@ -76,23 +76,27 @@ void ObjectManager::addNearbyObject(CGObjectInstance * obj, CGObjectInstance * n
void ObjectManager::updateDistances(const rmg::Object & obj) void ObjectManager::updateDistances(const rmg::Object & obj)
{ {
RecursiveLock lock(externalAccessMutex); updateDistances([obj](const int3& tile) -> ui32
tilesByDistance.clear();
for (auto tile : zone.areaPossible().getTiles()) //don't need to mark distance for not possible tiles
{ {
ui32 d = obj.getArea().distanceSqr(tile); //optimization, only relative distance is interesting return obj.getArea().distanceSqr(tile); //optimization, only relative distance is interesting
map.setNearestObjectDistance(tile, std::min(static_cast<float>(d), map.getNearestObjectDistance(tile))); });
tilesByDistance.push(std::make_pair(tile, map.getNearestObjectDistance(tile)));
}
} }
void ObjectManager::updateDistances(const int3 & pos) 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<ui32(const int3 & tile)> distanceFunction)
{ {
RecursiveLock lock(externalAccessMutex); RecursiveLock lock(externalAccessMutex);
tilesByDistance.clear(); tilesByDistance.clear();
for (auto tile : zone.areaPossible().getTiles()) //don't need to mark distance for not possible tiles 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<float>(d), map.getNearestObjectDistance(tile))); map.setNearestObjectDistance(tile, std::min(static_cast<float>(d), map.getNearestObjectDistance(tile)));
tilesByDistance.push(std::make_pair(tile, map.getNearestObjectDistance(tile))); tilesByDistance.push(std::make_pair(tile, map.getNearestObjectDistance(tile)));
} }

View File

@@ -63,6 +63,7 @@ public:
void updateDistances(const rmg::Object & obj); void updateDistances(const rmg::Object & obj);
void updateDistances(const int3& pos); void updateDistances(const int3& pos);
void updateDistances(std::function<ui32(const int3 & tile)> distanceFunction);
void createDistancesPriorityQueue(); void createDistancesPriorityQueue();
const rmg::Area & getVisitableArea() const; const rmg::Area & getVisitableArea() const;