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:
@@ -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)));
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user