diff --git a/client_web/src/components/game_screen.rs b/client_web/src/components/game_screen.rs index 24042be..8bf9a5b 100644 --- a/client_web/src/components/game_screen.rs +++ b/client_web/src/components/game_screen.rs @@ -18,6 +18,7 @@ pub fn GameScreen(state: GameUiState) -> impl IntoView { let i18n = use_i18n(); let vs = state.view_state.clone(); + let message = format!("{}", vs.message); let player_id = state.player_id; let is_my_turn = vs.active_mp_player == Some(player_id); let is_move_stage = is_my_turn @@ -351,6 +352,9 @@ pub fn GameScreen(state: GameUiState) -> impl IntoView { // ── Player score (below board) ──────────────────────────────────── +
+ {format!("{message}")} +
// ── Game-over overlay ───────────────────────────────────────────── {stage_is_ended.then(|| { diff --git a/client_web/src/trictrac/backend.rs b/client_web/src/trictrac/backend.rs index 486c3b9..7d60873 100644 --- a/client_web/src/trictrac/backend.rs +++ b/client_web/src/trictrac/backend.rs @@ -167,8 +167,7 @@ impl BackEndArchitecture for TrictracBackend moves: (m1, m2), }; if self.game.validate(&event) { - let message = format!("Event {:?} validated on {:?}", event, self.game); - console_log(message); + self.game.debug_message = format!("Event {:?} validated", event); let _ = self.game.consume(&event); self.drive_automatic_stages(); } @@ -332,20 +331,3 @@ mod tests { .any(|c| matches!(c, BackendCommand::TerminateRoom))); } } - -// ── Public API: WASM delegates to `inner`, other targets are no-ops ─────────── - -#[cfg(target_arch = "wasm32")] -mod inner { - use web_sys::console; - - pub fn console_log(message: String) { - console::log_1(&message.into()); - } -} - -#[cfg(target_arch = "wasm32")] -pub use inner::console_log; - -#[cfg(not(target_arch = "wasm32"))] -pub fn console_log(message: String) {} diff --git a/client_web/src/trictrac/types.rs b/client_web/src/trictrac/types.rs index f431482..927584e 100644 --- a/client_web/src/trictrac/types.rs +++ b/client_web/src/trictrac/types.rs @@ -43,6 +43,7 @@ pub struct ViewState { pub dice_jans: Vec, /// Last two checker moves played; default when no move has occurred yet. pub dice_moves: (CheckerMove, CheckerMove), + pub message: String, } /// One scoring event from a dice roll. @@ -86,6 +87,7 @@ impl ViewState { dice: (0, 0), dice_jans: Vec::new(), dice_moves: (CheckerMove::default(), CheckerMove::default()), + message: "".into(), } } @@ -184,6 +186,7 @@ impl ViewState { dice: (gs.dice.values.0, gs.dice.values.1), dice_jans, dice_moves: gs.dice_moves, + message: gs.get_debug_message(), } } }