From 7474924a7cfdfc3d03795157f5098aaa524dac71 Mon Sep 17 00:00:00 2001 From: salmonik Date: Mon, 24 Aug 2026 18:54:23 +0200 Subject: Fix TUI: stable 7-line game render, no extra newlines, spin busy flag prevents queueing --- src/bin/client/repl.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/bin/client/repl.rs') diff --git a/src/bin/client/repl.rs b/src/bin/client/repl.rs index d10edba..b5707ad 100644 --- a/src/bin/client/repl.rs +++ b/src/bin/client/repl.rs @@ -28,6 +28,7 @@ pub struct ClientState { pub game_manager: GameManager, cleanup_done: Arc>, in_game_mode: bool, + spinning: bool, } impl ClientState { @@ -54,6 +55,7 @@ impl ClientState { game_manager: GameManager::new(), cleanup_done: Arc::new(Mutex::new(false)), in_game_mode: false, + spinning: false, } } @@ -78,11 +80,15 @@ impl ClientState { return true; } KeyCode::Char(' ') => { + if self.spinning { + return true; // Discard keypress while busy + } let can_spin = self.game_manager.get_current_state() .map(|s| s.phase == GamePhase::WaitingToStart || s.phase == GamePhase::Finished) .unwrap_or(false); if can_spin { if let Some(mut stream) = self.stream.take() { + self.spinning = true; match self.game_manager.start_game(&mut stream) { Ok(()) => { let response = self.read_server_response(&mut stream); @@ -96,6 +102,7 @@ impl ClientState { Err(e) => println!("\nError starting game: {:?}", e), } self.stream = Some(stream); + self.spinning = false; } } return true; @@ -788,7 +795,7 @@ fn redraw_game(game_output: &str) { MoveToColumn(0) ) .unwrap(); - println!("{}", game_output); + print!("{}\r", game_output); stdout().flush().unwrap(); } @@ -804,7 +811,7 @@ fn redraw_game_lines(game_output: &str, lines: usize) { MoveToColumn(0) ) .unwrap(); - println!("{}", game_output); + print!("{}\r", game_output); stdout().flush().unwrap(); } -- cgit v1.2.3