fix: add sleep to game loop, panic hook restores terminal

- 16ms sleep per frame prevents 100% CPU spin
- Panic hook restores terminal (disable raw mode, leave alternate screen)
  before printing panic message, so errors are visible
- Remove debug eprintlns
This commit is contained in:
Emil
2026-06-20 22:03:30 +03:00
parent 159b7c6f61
commit e954cacdb5
2 changed files with 16 additions and 1 deletions
+5 -1
View File
@@ -196,6 +196,8 @@ impl Game {
}
self.handle_input(vw, vh);
std::thread::sleep(std::time::Duration::from_millis(16));
}
if let Err(e) = renderer.shutdown() {
@@ -206,7 +208,9 @@ impl Game {
pub fn handle_input(&mut self, vw: usize, vh: usize) {
let action = self.input.poll();
match action {
Action::Quit => self.running = false,
Action::Quit => {
self.running = false;
}
Action::MoveLeft => self.player.move_left(&mut self.entities),
Action::MoveRight => self.player.move_right(&mut self.entities),
Action::Jump => {
+11
View File
@@ -28,6 +28,17 @@ fn main() {
match cli.mode.as_str() {
"terminal" => {
std::panic::set_hook(Box::new(|info| {
let _ = crossterm::terminal::disable_raw_mode();
let _ = crossterm::execute!(
std::io::stdout(),
crossterm::style::ResetColor,
crossterm::cursor::Show,
crossterm::terminal::LeaveAlternateScreen,
crossterm::event::DisableMouseCapture,
);
eprintln!("PANIC: {}", info);
}));
let mut renderer = TerminalRenderer::new();
let mut game = Game::new();
game.run(&mut renderer);