1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-26 03:52:01 +02:00

Do not place zone guards adjacent to 3rd zone

This commit is contained in:
Tomasz Zieliński 2024-01-22 09:27:30 +01:00
parent bf54a6a7d3
commit b3adb9e554

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());