Skip to content

Commit 5ccaece

Browse files
committed
add a stricter segment orientation check to verify connectedness
1 parent b885acd commit 5ccaece

2 files changed

Lines changed: 7 additions & 1 deletion

File tree

src/main/scala/scripts/SegmentOrientationChecker.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,18 @@ object SegmentOrientationChecker extends Rul2Checker {
178178

179179
private val dxdDirtroadTiles = Set(IdTile(0x5700aa00, R0F0), IdTile(0x5700aa00, R2F0))
180180
private val badConnectionsFalsePositives = Set.empty[Rule[IdTile]] // currently none
181+
private val standardBasicRoadFlags = Set(1,2,3,11,13)
181182

182183
def areSegmentsBadlyConnected(tile1: Tile, tile2: Tile, rule: Rule[IdTile]): Boolean = {
183184
val connectingSegs1 = tile1.segs.filter(_.flags(2) != 0)
184185
val connectingSegs2 = tile2.segs.filter(_.flags(0) != 0)
185186
val commonNetworks = connectingSegs1.map(_.network).intersect(connectingSegs2.map(_.network))
186187
if (commonNetworks.isEmpty) {
187-
connectingSegs1.nonEmpty && connectingSegs2.nonEmpty
188+
connectingSegs1.nonEmpty && connectingSegs2.nonEmpty || (
189+
(connectingSegs1.nonEmpty || connectingSegs2.nonEmpty)
190+
&& connectingSegs1.forall(s => standardBasicRoadFlags.contains(s.flags(2).abs))
191+
&& connectingSegs2.forall(s => standardBasicRoadFlags.contains(s.flags(0).abs))
192+
)
188193
} else {
189194

190195
def wellConnected(connectingSegs1: Set[Segment], connectingSegs2: Set[Segment], east: Int, west: Int): Boolean =

src/test/scala/scripts/SegmentOrientationCheckerSpec.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class SegmentOrientationCheckerSpec extends AnyWordSpec with Matchers {
2121
}
2222
"detect badly connected segments" in {
2323
SegmentOrientationChecker.areSegmentsBadlyConnected(Ave2~(11,0,2,0), Road~WS & Ard3~SE, null).shouldBe(true)
24+
SegmentOrientationChecker.areSegmentsBadlyConnected(L1Road~(11,0,2,0), Road~(0,2,2,2), null).shouldBe(true)
2425
}
2526
"avoid false positives" in {
2627
Seq[(Tile, Tile, Rule[IdTile])](

0 commit comments

Comments
 (0)