Skip to content

Commit 9179447

Browse files
committed
add RHW networks to NWM turn paths generating script
1 parent fce2c28 commit 9179447

3 files changed

Lines changed: 26 additions & 4 deletions

File tree

src/main/scala/pathing/nwmpaths/NetworkConfig.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,17 @@ object NetworkConfig {
115115
add(Tla7m, NS)(-7f-16)(0.5f-16, 5.5f-16, -5.5f, -1.125f)(17.125f-16, 21.5f-16, 16-5.5f, 16-0.5f)(23f)
116116
add(Tla7m, ES, SE)(-32+1.5f)(-16-5.5f, -16+1.5f, -16+7.5f, -0.1f)(0.1f, 16-7.5f, 16-1.5f, 16+5.5f)(32-1.5f)
117117

118+
add(Dirtroad, NS)(-6.4f)(-2.5f)(2.5f)(6.5f)
119+
add(Dirtroad, ES)(-7.1f)(-3.2f)(3.2f)(7.1f)
120+
add(Rhw3, NS)(-7.5f)(-4.5f, 0f)(4.5f)(7.5f) // pedestrian paths are made up, needed for defining the boundary of the intersection
121+
add(Rhw3, ES, SE)(-7.99f)(-5.5f, 0f)(5.5f)(7.99f)
122+
add(Mis, NS)(-6.39f)(0f)()(6.39f)
123+
add(Mis, ES, SE)(-7.3f)(0f)()(7.3f)
124+
add(Rhw4, NS)(-6.5f)(-2.5f, 2.5f)()(6.5f)
125+
add(Rhw4, ES, SE)(-7.3f)(-3.2f, 3.2f)()(7.3f)
126+
// add(Rhw6s, NS)(-7.99f)(-7f, -2.5f, 2.5f)()(6.5f)
127+
// add(Rhw6s, ES, SE)(-7.99f)(-7.875f, -3.2f, 3.2f)()(7.1f)
128+
118129
m.toMap
119130
}
120131

src/main/scala/pathing/nwmpaths/PathCreator.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,26 @@ object PathCreator {
2525
def generateNwmPaths(implicit resolver: IdResolver): Iterable[BufferedEntry[Sc4Path]] = {
2626
val ids = scala.collection.mutable.Map.empty[Int, (Sc4Path, Boolean)]
2727
// TODO provisional
28-
val mainNetworks = NwmNetworks -- Set(Ave8)
28+
val mainNetworks = NwmNetworks -- Set(Ave8) ++ Set(Dirtroad, Rhw3, Mis, Rhw4)
2929
val minorNetworks = NwmNetworks ++ Set(Road, Street, Onewayroad, Avenue) -- Set(Ave8)
3030
for {
3131
main <- mainNetworks
3232
minor <- minorNetworks
33+
if {
34+
if (NetworkProperties.intersectionAllowed(main, minor)) {
35+
true
36+
} else {
37+
println(s"intersections between $main and $minor are not allowed yet(?)")
38+
false
39+
}
40+
}
3341
} /*do*/ {
3442
import Flags._, Implicits._
3543
def add(seg1: Segment, seg2: Segment, modelBased: Boolean) = {
3644
val tile0 = NetworkProperties.transformSharedDiagonals(seg1 & seg2)
3745
if (!seg1.network.isTla && !seg2.network.isTla) {
3846
val idTile = resolver(tile0)
47+
// require(!idTile.rf.flipped, s"unexpected mirrored tile ${tile0}")
3948
if (!ids.contains(idTile.id)) {
4049
val intersection = new PlusIntersection(seg1, seg2)
4150
ids(idTile.id) = (intersection.buildSc4Path * (R0F0 / idTile.rf), modelBased)
@@ -57,7 +66,7 @@ object PathCreator {
5766
}
5867
}
5968
}
60-
def hasDiagonalOverhangs(n: Network): Boolean = n.isNwm && NetworkProperties.isSingleTile(n) && n != Owr1
69+
def hasDiagonalOverhangs(n: Network): Boolean = n.isNwm && NetworkProperties.isSingleTile(n) && n != Owr1 || n.isRhw
6170
// In the following, it is important to choose the same directions as in
6271
// the IID scheme, since otherwise the uk flags can end up flipped.
6372
for { // OxD

src/main/scala/pathing/nwmpaths/plusIntersection.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,23 @@ class PlusIntersection(major: Segment, minor: Segment) extends CommonIntersectio
7171
val n = network(c)
7272
n == Network.Onewayroad || n.base.exists(_ == Network.Onewayroad)
7373
}
74+
private def hasPedestrianPaths(n: Network): Boolean = !n.isRhw || n == Network.Dirtroad
7475

7576
override val MaxRadius =
7677
if (NP.isTripleTile(major.network) || NP.isTripleTile(minor.network)) 6.0
7778
else if (NP.isDoubleTile(major.network) && NP.isDoubleTile(minor.network)) 14.0
7879
else 8.5 // single/single or mixed double/single
7980

80-
protected def rightTurnPaths(c: Cardinal, tt: TT) = if (tt == TT.Sim || tt == TT.Car) {
81+
protected def rightTurnPaths(c: Cardinal, tt: TT) = if (tt == TT.Sim && hasPedestrianPaths(network(c)) || tt == TT.Car) {
8182
sortedPaths(c).find(_.tt == tt).toSeq
8283
} else Nil
8384
protected def leftTurnPaths(c: Cardinal, tt: TT) = if (tt == TT.Car) {
8485
sortedPaths(c).reverseIterator.find(_.tt == tt).toSeq
8586
} else Nil
8687
protected def straightPaths(c: Cardinal, tt: TT, dropRedundantPaths: Boolean) = {
8788
val paths = sortedPaths(c).filter(_.tt == tt)
88-
if (tt != TT.Car) paths
89+
if (tt == TT.Sim && !hasPedestrianPaths(network(c))) Nil
90+
else if (tt != TT.Car) paths
8991
else if (dropRedundantPaths && hasTurningLane(c)) paths.dropRight(1) // TLA networks have one thru-lane less
9092
else if (dropRedundantPaths && isBidirectionalOneway(c)) paths.dropRight(paths.length / 2) // OWR networks have duplicated thru-lanes, we need only half of them
9193
else paths

0 commit comments

Comments
 (0)