1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-06 09:09:40 +02:00

Merge pull request #2237 from vcmi/fictive_connections

Wide, fictive, repulsive connections
This commit is contained in:
DjWarmonger
2023-06-25 19:57:08 +02:00
committed by GitHub
13 changed files with 268 additions and 58 deletions

View File

@@ -76,12 +76,28 @@ void ObjectManager::addNearbyObject(CGObjectInstance * obj, CGObjectInstance * n
}
void ObjectManager::updateDistances(const rmg::Object & obj)
{
updateDistances([obj](const int3& tile) -> ui32
{
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<ui32(const int3 & tile)> distanceFunction)
{
RecursiveLock lock(externalAccessMutex);
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
ui32 d = distanceFunction(tile);
map.setNearestObjectDistance(tile, std::min(static_cast<float>(d), map.getNearestObjectDistance(tile)));
tilesByDistance.push(std::make_pair(tile, map.getNearestObjectDistance(tile)));
}