M10d: toaletter innanför och utanför spärrarna
All checks were successful
release / build-release (push) Successful in 1m38s
All checks were successful
release / build-release (push) Successful in 1m38s
Björns tillägg 2026-10-24. Generatorn har nu ett betalt område per perrong (paidDepth) och toilets inside/outside/both: 005 Ueno och 008b Nippori har toalett bara innanför, 007b Ueno på båda sidor. Perrongceller görs till återvändsgränder (bara passagen mot starten behålls, labyrinten repareras) och det betalda området krymper om det skulle bli genomfart; regeln att varje perrong nås utan att passera ett annat betalt område testas i level och levelcheck. level.PathOutside används av testbotar och shots. Alla genererade banor utom 003 omgjorda, skärmdumpar omtagna. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -645,6 +645,32 @@ func (l *Level) InsideGates() map[Point]bool {
|
||||
return seen
|
||||
}
|
||||
|
||||
// PathOutside är Path som inte går genom betalda områden (innanför
|
||||
// spärrarna) utom dem som start eller mål ligger i – så att en bot inte
|
||||
// checkar in vid fel perrong på vägen (spärrar utan återvändo).
|
||||
func (l *Level) PathOutside(from, to Point, canEnter func(Point) bool) []Point {
|
||||
inside := l.InsideGates()
|
||||
allowed := map[Point]bool{}
|
||||
for _, seed := range []Point{from, to} {
|
||||
if !inside[seed] || allowed[seed] {
|
||||
continue
|
||||
}
|
||||
allowed[seed] = true
|
||||
queue := []Point{seed}
|
||||
for len(queue) > 0 {
|
||||
p := queue[0]
|
||||
queue = queue[1:]
|
||||
for _, n := range l.Neighbors(p) {
|
||||
if inside[n] && !allowed[n] {
|
||||
allowed[n] = true
|
||||
queue = append(queue, n)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return l.Path(from, to, func(p Point) bool { return canEnter(p) && (!inside[p] || allowed[p]) })
|
||||
}
|
||||
|
||||
// UngatedPlatforms listar perronger som går att nå från start utan att
|
||||
// passera någon spärr. Speldesignen kräver att alla perronger ligger
|
||||
// innanför spärrar, så listan ska vara tom för skeppade banor.
|
||||
|
||||
Reference in New Issue
Block a user