Skip to content

Commit 82d42e5

Browse files
committed
add GlrRuleGenerator for crosslinks with RHW and NWM
1 parent 6a72ab6 commit 82d42e5

7 files changed

Lines changed: 54 additions & 3 deletions

File tree

src/main/resources/tileOrientationCache.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
0x51137580,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
5050
0x51137680,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
5151
0x51137780,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
52+
0x51137880,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
53+
0x51137889,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
54+
0x51137980,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
55+
0x51137989,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)
5256
0x511384A5,(0,0)+(1,0)+(2,0)+(3,0)
5357
0x51139B89,(0,0)+(1,0)+(2,0)+(3,0)
5458
0x51149C00,(0,0)+(1,0)+(2,0)+(3,0)+(0,1)+(3,1)+(2,1)+(1,1)

src/main/scala/module/CompileAllMetarules.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ object CompileAllMetarules {
4040
CompileRhwCode.start(tileOrientationCache = tileOrientationCache)
4141
LOGGER.info("compiling NWM metarule code")
4242
CompileNwmCode.start(tileOrientationCache = tileOrientationCache)
43+
LOGGER.info("compiling GLR metarule code")
44+
CompileGlrCode.start(tileOrientationCache = tileOrientationCache)
4345
LOGGER.info("compiling SAM metarule code")
4446
CompileSamCode.start(tileOrientationCache = tileOrientationCache)
4547
LOGGER.info("compiling Onslope metarule code")

src/main/scala/module/CrossingGenerator.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ object CrossingGenerator {
1010
for {
1111
minor <- Network.values.iterator
1212
if minor != Subway && !isHrw(minor) && (main.isRhw || minor.isRhw ||
13-
(main.isNwm && (minor.isRhw || minor.isNwm || minor.base.isEmpty)) ||
14-
(main.isNwm && isSingleTile(main) && main.height == 0 && (minor == L1Dtr || minor == L2Dtr))
13+
(main.isNwm && (minor.isRhw || minor.isNwm || minor.base.isEmpty || GlrNetworks.contains(minor))) ||
14+
(main.isNwm && isSingleTile(main) && main.height == 0 && (minor == L1Dtr || minor == L2Dtr)) ||
15+
GlrNetworks.contains(main) && (minor.isRhw || minor.isNwm /*|| minor == main*/)
1516
) && intersectionAllowed(main, minor)
1617
} yield minor
1718
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.sc4nam.module
2+
3+
import io.github.memo33.metarules.meta._, syntax._
4+
import Network._, Flags._, Flag._, RotFlip._, Implicits._, group.SymGroup._
5+
import NetworkProperties._
6+
7+
class GlrRuleGenerator(var context: RuleTransducer.Context) extends RuleGenerator with Curve45Generator with CrossingGenerator {
8+
9+
def start(): Unit = {
10+
for (main <- GlrNetworks; base <- main.base) {
11+
Rules += main~WE | (base ~> main)~WE // ortho
12+
// Rules += main~WE | (base ~> main)~WC // ortho stub
13+
Rules += main~SE~ES | (base ~> main)~WN~NW // diagonal
14+
// curves
15+
// createCurve45Rules(main)
16+
// createCurve90Rules(main)
17+
18+
// crossings (O×O, O×D, D×O, D×D)
19+
for (minor <- CrossingGenerator.crossingNetworksOf(main)) {
20+
createCrossingRules(main, minor)
21+
}
22+
}
23+
}
24+
25+
}
26+
27+
// Compile individually with `sbt "runMain com.sc4nam.module.CompileGlrCode"`.
28+
object CompileGlrCode extends AbstractMain {
29+
lazy val resolve: IdResolver = new MiscResolver orElse new RealRailwayResolver orElse new RhwResolver orElse new NwmResolver orElse new ViaductResolver
30+
val generator = new GlrRuleGenerator(_)
31+
lazy val file = new java.io.File("target/Sec10e_GlrMetaGenerated_MANAGED.txt")
32+
}

src/main/scala/module/MiscResolver.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,13 +531,20 @@ class MiscResolver extends IdResolver {
531531
}
532532
}
533533

534+
// Lightrail crossings
535+
add(0x08dd0300, Rail~ES & Lightrail~NS)
536+
add(0x08dd0400, Rail~EW & Lightrail~NS)
537+
add(0x08dd1400, Rail~NS & Lightrail~ES)
538+
add(0x08dd1500, Rail~SW & Lightrail~ES)
539+
534540
// GLR crossings
535541
for ((glr, offset) <- Seq(Glr1, Glr2, Glr3, Glr4).zip(Seq(0, 0x4000, 0x8000, 0xc000))) {
536542
add(0x5f880200 + offset, glr~(0,0,2,2))
537543
add(0x5f880500 + offset, glr~(0,13,0,2))
538544
add(0x5f880400 + offset, glr~(0,0,1,13))
539545
add(0x5f881100 + offset, glr~(2,2,2,2))
540546
add(0x5f881100 + offset, glr~NS & glr~WE)
547+
add(0x5f881180 + offset, glr~NS & Lightrail~WE)
541548
add(0x5f881200 + offset, glr~(0,2,2,2))
542549
add(0x5f881200 + offset, glr~NS & glr~CE)
543550
// O×O

src/main/scala/module/NwmResolver.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ object NwmResolver {
4343
Monorail -> 0x0700,
4444
Glr1 -> 0x0800,
4545
Glr2 -> 0x0900,
46+
Glr3 -> 0x0805, // model-based
47+
Glr4 -> 0x0905, // model-based
4648
L2Hsr -> 0x0A00, // previously 0x1700, moved here to avoid DxO/DxD collision
4749
Str -> 0x0F00,
4850

src/main/scala/module/SanityChecker.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ object SanityChecker {
6969

7070
// Choose here the metarule-generated code that the handwritten RUL2 code
7171
// should be compared to.
72-
val metaruleFiles = Set("Sec7h0_OnslopeMetaGenerated_MANAGED.txt")
72+
val metaruleFiles = Set(
73+
"Sec7h0_OnslopeMetaGenerated_MANAGED.txt",
74+
// "Sec10e_GlrMetaGenerated_MANAGED.txt",
75+
)
7376

7477
def isMetaruleFile(path: Path): Boolean = {
7578
metaruleFiles.contains(path.getFileName().toString())

0 commit comments

Comments
 (0)