rust_console_game_engine/
engine.rs1use super::{RustConsole, RustConsoleGame};
2
3use std::time::Instant;
4use std::io::Error;
5
6pub struct RustConsoleGameEngine<'a> {
7 console: RustConsole,
8 game: &'a mut dyn RustConsoleGame
9}
10
11impl<'a> RustConsoleGameEngine<'a> {
12 pub fn new(game: &'a mut dyn RustConsoleGame, width: usize, height: usize, font_width: i16, font_height: i16) -> Result<RustConsoleGameEngine, Error> {
13 Ok(RustConsoleGameEngine {
14 console: RustConsole::new(width, height, font_width, font_height)?,
15 game
16 })
17 }
18
19 pub fn run(&mut self) {
20 self.game.setup();
21
22 self.console.flush_input_events();
23
24 let mut tp1 = Instant::now();
25 let mut tp2;
26
27 loop {
28 tp2 = Instant::now();
29 let elapsed_time = tp2.duration_since(tp1).as_secs_f32();
30 tp1 = tp2;
31
32 self.console.update_key_states();
33
34 self.console.handle_input_events();
35
36 self.game.update(&mut self.console, elapsed_time);
37
38 self.console.set_title(format!("RustConsoleGameEngine - {} - FPS: {:3.2}", self.game.name(), 1f32 / elapsed_time));
39
40 self.console.write_output();
41 }
42 }
43}