@@ -42,9 +42,26 @@ object RedundantAdjacenciesChecker {
4242 scala.util.Using .resource(new java.util.Scanner (path.toFile(), " UTF-8" )) { scanner =>
4343 while (scanner.hasNextLine()) {
4444 parseRuleWithRestrictedDriveside(scanner.nextLine(), drivesideFile) match {
45- case Some ((rule, Rhd )) => rulesRhd.addOne(new EquivRule (rule), rule)
46- case Some ((rule, Lhd )) => rulesLhd.addOne(new EquivRule (rule), rule)
47- case Some ((rule, RhdAndLhd )) => rulesShared.addOne(new EquivRule (rule), rule)
45+ // only the first matching rule is loaded by the game, so we store only the first one read
46+ case Some ((rule, Rhd )) =>
47+ val key = new EquivRule (rule)
48+ if (! rulesShared.contains(key) && ! rulesRhd.contains(key))
49+ rulesRhd.addOne(key, rule)
50+ case Some ((rule, Lhd )) =>
51+ val key = new EquivRule (rule)
52+ if (! rulesShared.contains(key) && ! rulesLhd.contains(key))
53+ rulesLhd.addOne(key, rule)
54+ case Some ((rule, RhdAndLhd )) =>
55+ val key = new EquivRule (rule)
56+ if (! rulesShared.contains(key)) {
57+ if (! rulesRhd.contains(key) && ! rulesLhd.contains(key))
58+ rulesShared.addOne(key, rule)
59+ else
60+ require(
61+ rulesRhd.contains(key) == rulesLhd.contains(key),
62+ s " There's an unexpected rule conflict that differs between RHD and LHD: $rule"
63+ )
64+ }
4865 case None => // ignore
4966 }
5067 }
@@ -69,9 +86,10 @@ object RedundantAdjacenciesChecker {
6986 case Some ((rule, Lhd )) => isRedundantAdjacency(rule, lookupRuleLhd)
7087 case Some ((rule, RhdAndLhd )) =>
7188 val b = isRedundantAdjacency(rule, lookupRuleRhd)
72- if (b != isRedundantAdjacency(rule, lookupRuleLhd)) {
73- throw new AssertionError (s " Redundancies should be the same for RHD and LHD: $rule" ) // hopefully this will always be the case
74- }
89+ require(
90+ b == isRedundantAdjacency(rule, lookupRuleLhd),
91+ s " Redundancies should be the same for RHD and LHD: $rule" // hopefully this will always be the case
92+ )
7593 b
7694 case None => false // comments are not redundant
7795 }
0 commit comments