From e920b20fafe375eec15b24eb8cde4b1455dd01af Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 1 Nov 2026 20:11:41 +0100 Subject: 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. --- tests/roulette.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'tests/roulette.rs') diff --git a/tests/roulette.rs b/tests/roulette.rs index 0c5e195..970ab6a 100644 --- a/tests/roulette.rs +++ b/tests/roulette.rs @@ -396,3 +396,23 @@ fn rejects_bad_roulette_results() { assert!(parse_roulette_response("ROULETTE_RESULT s 1 1 1 17 black nope").is_err()); assert!(parse_roulette_response("").is_err()); } + +#[test] +fn chips_can_be_taken_back_one_at_a_time() { + let mut bets = Bets::default(); + bets.add(BetTarget::Straight { number: 17 }, 50); + bets.add(BetTarget::Outside { kind: Outside::Red }, 10); + + bets.reduce(&BetTarget::Straight { number: 17 }, 25); + assert_eq!(bets.amount_on(&BetTarget::Straight { number: 17 }), 25); + assert_eq!(bets.total(), 35); + + // Reducing past zero drops the chip instead of going negative. + bets.reduce(&BetTarget::Straight { number: 17 }, 100); + assert_eq!(bets.amount_on(&BetTarget::Straight { number: 17 }), 0); + assert_eq!(bets.total(), 10); + + // A target with no chip is left alone. + bets.reduce(&BetTarget::Dozen { index: 0 }, 25); + assert_eq!(bets.total(), 10); +} -- cgit v1.2.3