aboutsummaryrefslogtreecommitdiff
path: root/internal/casino
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-10-03 01:46:58 -0400
committerhistoria <[not public]>2026-10-03 01:46:58 -0400
commitefccf58741ae43d9e891c6b743b146982b344ccf (patch)
tree505a068497c5531b91ac72da32db14145737e982 /internal/casino
parent0ec8f3692960a064616e630c914058298b22897b (diff)
downloadthehouseoficarus-efccf58741ae43d9e891c6b743b146982b344ccf.tar.gz
fix: don't show roulette table after each bet
Diffstat (limited to 'internal/casino')
-rw-r--r--internal/casino/command_hints_test.go10
-rw-r--r--internal/casino/roulette.go21
2 files changed, 19 insertions, 12 deletions
diff --git a/internal/casino/command_hints_test.go b/internal/casino/command_hints_test.go
index bd15883..b391526 100644
--- a/internal/casino/command_hints_test.go
+++ b/internal/casino/command_hints_test.go
@@ -119,23 +119,23 @@ func TestOtherCasinoHintsRespectCommitment(t *testing.T) {
r := newRouletteTable(1, TableConfig{ID: "r", Game: GameRoulette, BettingTicks: 10}, newTestRand())
r.join("a")
r.join("b")
- if hintHas(r.menuEvent("a").Menu.Commands, "bet / rebet") {
+ if hintHas(r.menuEvent("a", true).Menu.Commands, "bet / rebet") {
t.Fatal("roulette no wager to repeat")
}
r.bet("a", "red", 10, &testWallet{chips: 1000})
- if hintBet(r.menuEvent("a").Menu.Commands) {
+ if hintBet(r.menuEvent("a", true).Menu.Commands) {
t.Fatal("roulette duplicate bet advertised")
}
- if !hintBet(r.menuEvent("b").Menu.Commands) {
+ if !hintBet(r.menuEvent("b", true).Menu.Commands) {
t.Fatal("roulette missing eligible bet")
}
r.phase = phasePlaying
- if hintBet(r.menuEvent("b").Menu.Commands) {
+ if hintBet(r.menuEvent("b", true).Menu.Commands) {
t.Fatal("roulette spinning bets advertised")
}
r.phase = phaseWaiting
r.players.get("a").HasBet = false
- if !hintHas(r.menuEvent("a").Menu.Commands, "bet / rebet") {
+ if !hintHas(r.menuEvent("a", true).Menu.Commands, "bet / rebet") {
t.Fatal("roulette repeat missing")
}
}
diff --git a/internal/casino/roulette.go b/internal/casino/roulette.go
index 783d22f..8f45d49 100644
--- a/internal/casino/roulette.go
+++ b/internal/casino/roulette.go
@@ -510,7 +510,11 @@ func (t *rouletteTable) board(_ string) Snapshot {
defer t.mu.Unlock()
return t.view()
}
-func (t *rouletteTable) menuEvent(name string) Event {
+
+// menuEvent builds the next-spin menu. board controls whether it also carries
+// the table graphic: sitting down and the live status keep it, settlement does
+// not, so a resolved spin does not redraw the wheel, racetrack, and history.
+func (t *rouletteTable) menuEvent(name string, board bool) Event {
commands := []MenuCommand{}
p := t.players.get(name)
if t.phase != phasePlaying && p != nil && !p.HasBet {
@@ -527,20 +531,22 @@ func (t *rouletteTable) menuEvent(name string) Event {
commands = withTableHints(commands, t.wagerRows())
}
e := t.betMenuEvent(name, commands)
- e.Snapshot = t.view()
+ if board {
+ e.Snapshot = t.view()
+ }
return e
}
func (t *rouletteTable) join(name string) []Event {
t.mu.Lock()
defer t.mu.Unlock()
if t.players.has(name) {
- return []Event{t.menuEvent(name)}
+ return []Event{t.menuEvent(name, true)}
}
if t.players.count() >= t.Config.MaxPlayers {
return []Event{t.private(name, "That roulette table is full.")}
}
e := t.addSeatLocked(name, &roulettePlayer{Participant: Participant{Name: name, Connected: true}})
- return []Event{e, t.menuEvent(name)}
+ return []Event{e, t.menuEvent(name, true)}
}
func (t *rouletteTable) leave(name string) []Event {
t.mu.Lock()
@@ -715,7 +721,8 @@ func (t *rouletteTable) settle() []Event {
wheel[(index+1)%n], wheel[(index+2)%n],
}
t.lastResult = s
- e := t.event("The ball lands in {casino_emphasis}"+pocket+"{/}!", true)
+ // A leading blank line separates the reveal from the spinning strips above.
+ e := t.event("\nThe ball lands in {casino_emphasis}"+pocket+"{/}!", true)
e.Snapshot = s
events := []Event{e}
for _, p := range t.players.ordered() {
@@ -762,7 +769,7 @@ func (t *rouletteTable) settle() []Event {
events = append(events, t.finishControlsLocked()...)
for _, p := range t.players.ordered() {
if p.Connected && !p.SittingOut {
- events = append(events, t.menuEvent(p.Name))
+ events = append(events, t.menuEvent(p.Name, false))
}
}
return events
@@ -799,7 +806,7 @@ func (t *rouletteTable) rebet(name string) (string, int) {
func (t *rouletteTable) status(name string) []Event {
t.mu.Lock()
defer t.mu.Unlock()
- e := t.menuEvent(name)
+ e := t.menuEvent(name, true)
events := []Event{e}
if t.phase == phaseWaiting && t.lastResult != nil {
last := t.private(name, "Last spin:")