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