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>
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package minigame
|
|
|
|
// Payer är frågan "vem betalar?" vid kiosken när alla i sällskapet har egna
|
|
// kort: kontant, spelarens kort eller en följares kort. Pilarna väljer,
|
|
// Enter betalar (bara om det räcker), Esc avbryter köpet. Poängen är att
|
|
// kunna vara strategisk så att alla har kvar pengar till spärrarna.
|
|
type PayOption struct {
|
|
Name string // vem (tom för kontant)
|
|
Cash bool // kontanter i plånboken
|
|
Member int // 0 = spelarens kort, annars följarens index i sällskapet
|
|
Yen int // tillgängligt belopp
|
|
}
|
|
|
|
// Payer är väljaren.
|
|
type Payer struct {
|
|
base
|
|
Price int
|
|
Options []PayOption
|
|
Cursor int
|
|
Chosen *PayOption // vald källa när det lyckats
|
|
Refused bool // försökte betala med något som inte räcker
|
|
}
|
|
|
|
// NewPayer skapar väljaren med markören på första källan som har råd.
|
|
func NewPayer(price int, options []PayOption) *Payer {
|
|
g := &Payer{Price: price, Options: append([]PayOption(nil), options...)}
|
|
for i, o := range g.Options {
|
|
if o.Yen >= price {
|
|
g.Cursor = i
|
|
break
|
|
}
|
|
}
|
|
return g
|
|
}
|
|
|
|
// CanAfford rapporterar om källan i räcker till priset.
|
|
func (g *Payer) CanAfford(i int) bool { return g.Options[i].Yen >= g.Price }
|
|
|
|
// Update flyttar markören och tar emot betala/avbryt.
|
|
func (g *Payer) Update(in Input, dt float64) {
|
|
if g.done || len(g.Options) == 0 {
|
|
return
|
|
}
|
|
if in.Cancel {
|
|
g.done = true
|
|
return
|
|
}
|
|
if mv := in.MoveX + in.Move; mv != 0 {
|
|
g.Cursor = wrap(g.Cursor+mv, len(g.Options))
|
|
g.Refused = false
|
|
}
|
|
if in.Confirm {
|
|
if !g.CanAfford(g.Cursor) {
|
|
g.Refused = true
|
|
return
|
|
}
|
|
o := g.Options[g.Cursor]
|
|
g.Chosen = &o
|
|
g.done, g.success = true, true
|
|
}
|
|
}
|