diff --git a/src/main.rs b/src/main.rs index 8cb8351..56506d6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,17 +4,19 @@ use sdl2::event::Event; use sdl2::keyboard::{Keycode, Scancode}; use std::collections::HashMap; use std::convert::TryInto; -use std::ffi::{c_void, CStr, CString}; +use std::ffi::{c_void, CString}; use std::fs::File; use std::io::Read; use std::path::Path; -use std::time::{Duration, Instant}; +use std::time::{Duration}; mod iqm; mod shader; +mod timestep; use iqm::Model; use shader::{ShaderProgram, ShaderObject}; +use timestep::TimeStep; pub fn load_small_file

(name: P) -> Vec where P: AsRef @@ -222,54 +224,6 @@ impl WorldState { } } -struct TimeStep { - last_frame_time: Instant, - // Milliseconds - accum: u128, - fps_num: u16, - fps_den: u16, -} - -impl TimeStep { - pub fn new (fps_num: u16, fps_den: u16) -> Self { - Self { - last_frame_time: Instant::now (), - accum: 0, - fps_num, - fps_den, - } - } - - // Automatically gets monotonic system time from Instant - // If you need something fancy just rewrite this. - // Returns: How many logics steps to run. Typically 0 or 1. - - pub fn step (&mut self) -> u16 { - let frame_time = Instant::now (); - - let fps_num_128: u128 = self.fps_num.into (); - let fps_den_128: u128 = self.fps_den.into (); - - self.accum += (frame_time - self.last_frame_time).as_millis () * fps_num_128; - - let mut result = 0; - const MAX_FRAMES: u16 = 4; - - for _ in 0..MAX_FRAMES { - if self.accum > fps_den_128 { - result += 1; - self.accum -= fps_den_128; - } - else { - break; - } - } - - self.last_frame_time = frame_time; - result - } -} - fn main () { let sdl_context = sdl2::init ().unwrap (); let video_subsystem = sdl_context.video ().unwrap (); diff --git a/src/timestep.rs b/src/timestep.rs new file mode 100644 index 0000000..c8e1f0c --- /dev/null +++ b/src/timestep.rs @@ -0,0 +1,49 @@ +use std::time::Instant; + +pub struct TimeStep { + last_frame_time: Instant, + // Milliseconds + accum: u128, + fps_num: u16, + fps_den: u16, +} + +impl TimeStep { + pub fn new (fps_num: u16, fps_den: u16) -> Self { + Self { + last_frame_time: Instant::now (), + accum: 0, + fps_num, + fps_den, + } + } + + // Automatically gets monotonic system time from Instant + // If you need something fancy just rewrite this. + // Returns: How many logics steps to run. Typically 0 or 1. + + pub fn step (&mut self) -> u16 { + let frame_time = Instant::now (); + + let fps_num_128: u128 = self.fps_num.into (); + let fps_den_128: u128 = self.fps_den.into (); + + self.accum += (frame_time - self.last_frame_time).as_millis () * fps_num_128; + + let mut result = 0; + const MAX_FRAMES: u16 = 4; + + for _ in 0..MAX_FRAMES { + if self.accum > fps_den_128 { + result += 1; + self.accum -= fps_den_128; + } + else { + break; + } + } + + self.last_frame_time = frame_time; + result + } +}