Skip to content

Commit 032731b

Browse files
committed
solve exceptional case of three-network intersection by defining an ID
1 parent 7ad1f6e commit 032731b

4 files changed

Lines changed: 10 additions & 9 deletions

File tree

src/main/scala/module/MiscResolver.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ class MiscResolver extends IdResolver {
271271
add(0x5F502500, Road~CES & Street~NE)
272272
add(0x5F072300, Road~(0,0,1,3) & Street~(2,2,0,0))
273273
add(0x04008900, Road~WE & Avenue~NS)
274+
add(0x04008900, Road~CE & Avenue~NS & Onewayroad~WC)
274275
add(0x04001300, Road~ES & Avenue~SN)
275276
add(0x04001900, Road~WN & Avenue~SN)
276277
add(0x04005700, Road~NS & Avenue~ES)

src/main/scala/module/ReverseResolver.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,16 @@ object ReverseResolver {
7373
true
7474
} else if (isDiagonalTAmbuigity(tile1, tile2)) {
7575
true
76-
} else if (idTile.id == 0x5D7E0800) { // L1Dtr->L2Dtr upper HT uses same ID as L0Dtr->L2Dtr
77-
true
7876
} else {
79-
false
77+
ignorableConflicts.contains(idTile.id)
8078
}
8179
}
8280

81+
private val ignorableConflicts = Set[Int](
82+
0x5D7E0800, // L1Dtr->L2Dtr upper HT uses same ID as L0Dtr->L2Dtr
83+
0x04008900, // also functions as three-network crossing
84+
)
85+
8386
def create(): ReverseResolver = {
8487
val maps = Seq(
8588
(new MiscResolver).tileMap,

src/main/scala/scripts/SegmentOrientationChecker.scala

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,7 @@ object SegmentOrientationChecker extends Rul2Checker {
161161
}
162162

163163
private val dxdDirtroadTiles = Set(IdTile(0x5700aa00, R0F0), IdTile(0x5700aa00, R2F0))
164-
private val badConnectionsFalsePositives = Set[Rule[IdTile]](
165-
// triple crossings between Road×Avenue (O×O) and orth OWR
166-
Rule(0x04008800,0,0,0x09000300,3,0,0x04008900,2,0,0x09004b00,3,0),
167-
Rule(0x04008800,0,0,0x09004b00,3,0,0x04008900,2,0,0x09004b00,3,0),
168-
)
164+
private val badConnectionsFalsePositives = Set.empty[Rule[IdTile]] // currently none
169165

170166
def areSegmentsBadlyConnected(tile1: Tile, tile2: Tile, rule: Rule[IdTile]): Boolean = {
171167
val connectingSegs1 = tile1.segs.filter(_.flags(2) != 0)

src/test/scala/scripts/SegmentOrientationCheckerSpec.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ class SegmentOrientationCheckerSpec extends AnyWordSpec with Matchers {
2222
SegmentOrientationChecker.areSegmentsBadlyConnected(Ave2~(11,0,2,0), Road~WS & Ard3~SE, null).shouldBe(true)
2323
}
2424
"avoid false positives" in {
25-
Seq(
25+
Seq[(Tile, Tile, Rule[IdTile])](
2626
(Rhw4~WE & Mis~ES, Mis~NW & Dirtroad~EN, Rule(0x57127d05,0,0,0x5700aa00,2,0,0x57127d05,0,0,0x5712aa80,2,0)),
2727
(Rhw4~EW & Mis~EN, Mis~SW & Dirtroad~ES, Rule(0x57127d05,2,1,0x5700aa00,0,0,0x57127d05,2,1,0x5712aa80,0,1)),
2828
(Rhw4~WE & Mis~SE, Mis~WN & Dirtroad~EN, Rule(0x57127d85,0,0,0x5700aa00,2,0,0x57127d85,0,0,0x5712aa00,2,0)),
2929
(Rhw4~EW & Mis~NE, Mis~WS & Dirtroad~ES, Rule(0x57127d85,2,1,0x5700aa00,0,0,0x57127d85,2,1,0x5712aa00,0,1)),
30+
(Road~CW & Avenue~SN & Onewayroad~EC, Onewayroad~EW, Rule(0x04008800,0,0,0x09000300,3,0,0x04008900,2,0,0x09004b00,3,0)),
3031
).foreach { case (t1, t2, rule) =>
3132
SegmentOrientationChecker.areSegmentsBadlyConnected(t1, t2, rule).shouldBe(false)
3233
}

0 commit comments

Comments
 (0)