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