cdungeon/src/main.rs
2025-12-01 08:43:41 +01:00

47 lines
1.2 KiB
Rust

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<T: Backend>(terminal: &mut Terminal<T>) -> Result<PathBuf> {
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),
}
}
}