mod game; mod geometry; use std::path::PathBuf; use color_eyre::eyre::Result; use crossterm::{event::{self, DisableMouseCapture, EnableMouseCapture}, execute, terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode}}; use ratatui::{ Terminal, prelude::{Backend, CrosstermBackend}, }; use game::GameModel; fn main() -> Result<()> { enable_raw_mode()?; execute!(std::io::stderr(), EnterAlternateScreen, EnableMouseCapture)?; let mut terminal = Terminal::new(CrosstermBackend::new(std::io::stderr()))?; let result = main_loop(&mut terminal); disable_raw_mode()?; execute!( terminal.backend_mut(), LeaveAlternateScreen, DisableMouseCapture )?; terminal.show_cursor()?; let path = result?; println!("{}", path.display()); Ok(()) } fn main_loop(terminal: &mut Terminal) -> Result { let mut model = GameModel::new(PathBuf::from(".")); loop { terminal.draw(|frame| model.render(frame))?; let term_event = event::read()?; match model.update(term_event) { Ok(new_model) => model = new_model, Err(path) => break Ok(path), } } }