2
0
Эх сурвалжийг харах

Do not place zone guards adjacent to 3rd zone

Tomasz Zieliński 1 жил өмнө
parent
commit
b3adb9e554

+ 15 - 0
lib/rmg/modificators/ConnectionsPlacer.cpp

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