summaryrefslogtreecommitdiffstats
path: root/src/client/games
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-11-01 20:11:41 +0100
committersalmonik <salmonik@tuta.io>2026-11-01 20:11:41 +0100
commite920b20fafe375eec15b24eb8cde4b1455dd01af (patch)
tree308d2f7999177a753528779f6ec7926f3fa50818 /src/client/games
parentv4.1.0: add the egui workspace member and the roulette style spike (diff)
downloadzagan-bet-e920b20fafe375eec15b24eb8cde4b1455dd01af.tar.gz
zagan-bet-e920b20fafe375eec15b24eb8cde4b1455dd01af.zip
v4.1.1: pointer-first betting and visible payouts in the GUI
The felt snaps the hover to the shared fine lattice: inner half of a cell is a straight, an edge a split, a crossing a corner. A translucent chip previews the target and the covered cells tint. Left click adds the selected chip, right or middle click takes one back through the new Bets::reduce; C or CLEAR empties the slip, and SPIN stays disabled with no chips. The result now pays out: the wheel leaves the winning pocket under the pointer, the winning cell and pocket get a gold outline, and the sidebar reports the amount returned and the net for the round (NO WIN on a loss). Placing a chip after a result starts the next round without losing the wheel position. The column row now spans the full width like a real table instead of hugging the left edge. Adds tests for lattice snapping, target naming and taking chips back.
Diffstat (limited to 'src/client/games')
-rw-r--r--src/client/games/roulette.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/client/games/roulette.rs b/src/client/games/roulette.rs
index ec9573c..f0ed816 100644
--- a/src/client/games/roulette.rs
+++ b/src/client/games/roulette.rs
@@ -95,7 +95,7 @@ impl Cursor {
95 pub fn target(&self) -> Option<BetTarget> { 95 pub fn target(&self) -> Option<BetTarget> {
96 match self { 96 match self {
97 Cursor::Zero => Some(BetTarget::Straight { number: 0 }), 97 Cursor::Zero => Some(BetTarget::Straight { number: 0 }),
98 Cursor::Lattice { x, y } => felt_target(*x, *y), 98 Cursor::Lattice { x, y } => target_at(*x, *y),
99 Cursor::Dozen(index) => Some(BetTarget::Dozen { 99 Cursor::Dozen(index) => Some(BetTarget::Dozen {
100 index: *index as u8, 100 index: *index as u8,
101 }), 101 }),
@@ -171,7 +171,11 @@ fn cell_number(column: usize, row: usize) -> Option<u8> {
171} 171}
172 172
173/// Bet under a point of the fine grid. 173/// Bet under a point of the fine grid.
174fn felt_target(x: usize, y: usize) -> Option<BetTarget> { 174///
175/// Both frontends use this: the terminal moves a cursor over the lattice, and
176/// the GUI snaps a mouse position to it. Odd coordinates are cell centres,
177/// even coordinates are the lines where a split or corner chip sits.
178pub fn target_at(x: usize, y: usize) -> Option<BetTarget> {
175 if !(1..=FELT_X_MAX).contains(&x) || !(1..=FELT_Y_MAX).contains(&y) { 179 if !(1..=FELT_X_MAX).contains(&x) || !(1..=FELT_Y_MAX).contains(&y) {
176 return None; 180 return None;
177 } 181 }