rust_console_game_engine/
engine.rs

1use 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}