refactor: consolidate card_to_id into solitaire_core
Three byte-identical copies of the stable 0..=51 card-id helper (suit_index*13 + rank-1) lived in feedback_anim_plugin, radial_menu, and solitaire_wasm. The WASM copy's own comment notes it MUST match the engine for cross-platform replay parity — exactly the kind of invariant a single source of truth should enforce. Add `solitaire_core::card::card_to_id(&Card) -> u32` and have all three call sites import it. No behaviour change (same formula). cargo test --workspace and cargo clippy --workspace --all-targets -- -D warnings pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -188,19 +188,9 @@ pub fn deal_stagger_jitter(card_id: u32) -> f32 {
|
||||
(jitter_norm - 0.5) * 0.2 // ±0.1 == ±10 %
|
||||
}
|
||||
|
||||
/// Converts a `Card` to a `u32` seed suitable for deterministic per-card
|
||||
/// jitter. Uses suit index × 13 + (rank value − 1) to produce a stable 0–51
|
||||
/// integer that survives changes to the internal `Card` representation.
|
||||
fn card_to_id(card: &Card) -> u32 {
|
||||
use solitaire_core::card::Suit;
|
||||
let suit_index = match card.suit() {
|
||||
Suit::Clubs => 0,
|
||||
Suit::Diamonds => 1,
|
||||
Suit::Hearts => 2,
|
||||
Suit::Spades => 3,
|
||||
};
|
||||
suit_index * 13 + (card.rank() as u32 - 1)
|
||||
}
|
||||
// Per-card jitter keys off the shared stable card id so it matches the
|
||||
// numeric identity used elsewhere (and on the WASM replay side).
|
||||
use solitaire_core::card::card_to_id;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Plugin
|
||||
|
||||
Reference in New Issue
Block a user