1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

Merge pull request #3544 from vcmi/fix_leaky_connections

Do not place zone guards adjacent to 3rd zone
This commit is contained in:
Ivan Savenko 2024-01-23 13:39:11 +02:00 committed by GitHub
commit b51e58cddc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -177,6 +177,21 @@ void ConnectionsPlacer::selfSideDirectConnection(const rmg::ZoneConnection & con
int3 potentialPos = zone.areaPossible().nearest(borderPos);
assert(borderPos != potentialPos);
//Check if guard pos doesn't touch any 3rd zone. This would create unwanted passage to 3rd zone
bool adjacentZone = false;
map.foreach_neighbour(potentialPos, [this, &adjacentZone, otherZoneId](int3 & pos)
{
auto zoneId = map.getZoneID(pos);
if (zoneId != zone.getId() && zoneId != otherZoneId)
{
adjacentZone = true;
}
});
if (adjacentZone)
{
continue;
}
//Take into account distance to objects from both sides
float dist = std::min(map.getTileInfo(potentialPos).getNearestObjectDistance(),
map.getTileInfo(borderPos).getNearestObjectDistance());