feat(engine): hide score and timer in Zen mode per spec

Zen mode is intended for relaxed play with no performance pressure.
The HUD now clears score and elapsed-time displays when GameMode::Zen
is active, matching the ARCHITECTURE.md spec ("No timer. No score
display."). The mode badge still shows "ZEN" so the player knows
which mode they're in.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-04-27 03:04:18 +00:00
parent de840fb006
commit 0a76c089d0
+16 -3
View File
@@ -83,8 +83,14 @@ fn update_hud(
// Score, moves, and mode only need updating when the game state changes.
if game.is_changed() {
let g = &game.0;
let is_zen = g.mode == GameMode::Zen;
if let Ok(mut t) = score_q.get_single_mut() {
**t = format!("Score: {}", g.score);
// Zen mode suppresses score display per spec ("No score display").
**t = if is_zen {
String::new()
} else {
format!("Score: {}", g.score)
};
}
if let Ok(mut t) = moves_q.get_single_mut() {
**t = format!("Moves: {}", g.move_count);
@@ -103,8 +109,10 @@ fn update_hud(
}
// Time display: show Time Attack countdown every frame when active;
// otherwise show game elapsed time (updates once per second via game.is_changed()).
let update_time = ta_active || game.is_changed();
// Zen mode suppresses the timer per spec ("No timer").
// Otherwise show game elapsed time (updates once per second via game.is_changed()).
let is_zen = game.0.mode == GameMode::Zen;
let update_time = (ta_active || game.is_changed()) && !is_zen;
if update_time {
if let Ok(mut t) = time_q.get_single_mut() {
if let Some(ta) = time_attack.as_ref().filter(|ta| ta.active) {
@@ -119,6 +127,11 @@ fn update_hud(
**t = format!("{m}:{s:02}");
}
}
} else if is_zen && game.is_changed() {
// Clear the time display when entering Zen mode.
if let Ok(mut t) = time_q.get_single_mut() {
**t = String::new();
}
}
}