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(),
}
}
}