M10c: vem betalar i kiosken och spärrar utan återvändo
All checks were successful
release / build-release (push) Successful in 2m7s
All checks were successful
release / build-release (push) Successful in 2m7s
Björns tillägg 2026-10-24. Med egna kort och fler i sällskapet frågar kiosken vem som betalar (minigame.Payer: kontant, spelarens kort eller en följares kort; den som inte har råd nekas, Esc avbryter). Avgiften dras nu när man passerar spärren in i det betalda området (level.InsideGates), inte på spärrrutan. Banflaggan oneWayGates: incheckad släpps inte ut igen förrän man åkt; Enter vid spärren kallar på personal (10 s) som låser upp korten; ny inpassering kostar igen. På i 005, 007/007b och 008/008b. Skriptkommandon urge och push. Docs, wiki och skärmdumpar uppdaterade. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -155,6 +155,25 @@ func walk(t *testing.T, r *Run, path []level.Point) {
|
||||
}
|
||||
}
|
||||
|
||||
// throughGate kapar en väg vid första rutan innanför spärrarna – där dras
|
||||
// avgiften (inte på spärrrutan).
|
||||
func throughGate(l *level.Level, path []level.Point) []level.Point {
|
||||
in := l.InsideGates()
|
||||
for i, p := range path {
|
||||
if in[p] {
|
||||
return path[:i+1]
|
||||
}
|
||||
}
|
||||
if len(path) > 0 { // vägen slutar på spärren: kliv in på rutan innanför
|
||||
for _, n := range l.Neighbors(path[len(path)-1]) {
|
||||
if in[n] {
|
||||
return append(path, n)
|
||||
}
|
||||
}
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
// waitForTrain står still tills tåget vid perrongen är inne.
|
||||
func waitForTrain(t *testing.T, r *Run) *level.Train {
|
||||
t.Helper()
|
||||
@@ -698,12 +717,7 @@ func TestPhoneSpeedRescanAndBattery(t *testing.T) {
|
||||
}
|
||||
gate := l.Find(level.Gate)[0]
|
||||
path := l.Path(r.Player.Tile, gate, r.PathCanEnter)
|
||||
for i, p := range path { // stanna på den första spärrutan – där sker skanningen
|
||||
if l.At(p) == level.Gate {
|
||||
path = path[:i+1]
|
||||
break
|
||||
}
|
||||
}
|
||||
path = throughGate(l, path) // in i det betalda området: där dras avgiften och sker skanningen
|
||||
walk(t, r, path)
|
||||
rescans[r.Rescans]++
|
||||
if r.Rescans == 1 {
|
||||
@@ -873,12 +887,7 @@ func TestIndividualCardsAtGateAndMachine(t *testing.T) {
|
||||
// Spärren drar från allas kort.
|
||||
before := r.Wallet.Spent
|
||||
path := l1.Path(r.Player.Tile, gate, r.PathCanEnter)
|
||||
for i, p := range path {
|
||||
if l1.At(p) == level.Gate {
|
||||
path = path[:i+1]
|
||||
break
|
||||
}
|
||||
}
|
||||
path = throughGate(l1, path) // in i det betalda området: där dras avgiften och sker skanningen
|
||||
walk(t, r, path)
|
||||
if anna.Card != 1000-l1.FareYen || r.Wallet.Card != StartCardYen-l1.FareYen || r.Wallet.Spent != before+2*l1.FareYen {
|
||||
t.Fatalf("efter spärren: anna=%d egen=%d spent=%d", anna.Card, r.Wallet.Card, r.Wallet.Spent)
|
||||
@@ -1039,12 +1048,7 @@ func TestRunOptionsFromProgression(t *testing.T) {
|
||||
r.Step(frame, None, false)
|
||||
}
|
||||
path := l.Path(r.Player.Tile, gate, r.PathCanEnter)
|
||||
for i, p := range path {
|
||||
if l.At(p) == level.Gate {
|
||||
path = path[:i+1]
|
||||
break
|
||||
}
|
||||
}
|
||||
path = throughGate(l, path) // in i det betalda området: där dras avgiften och sker skanningen
|
||||
walk(t, r, path)
|
||||
if r.Wallet.Spent != 0 || r.GatePasses != 1 {
|
||||
t.Fatalf("gratis spärr: spent=%d passes=%d", r.Wallet.Spent, r.GatePasses)
|
||||
|
||||
Reference in New Issue
Block a user