diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/main.rs b/src/main.rs index 9855cdc..50320b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,8 +12,7 @@ use sdl2::rect::Rect; use sdl2::render::Texture; use sdl2::surface::Surface; use std::ops::DerefMut; -use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime}; pub fn main() { let sdl_context = sdl2::init().unwrap(); @@ -34,16 +33,15 @@ pub fn main() { let mut i = 0; // amount to incr sin_offset by per frame - // TODO: do not bind to framerate u silly bean - let sin_speed = 0.0025; - let mut sin_offset = 0.5; + let start_time = SystemTime::now(); + let movement_per_second = 0.5; 'running: loop { + let time = SystemTime::now() + .duration_since(start_time) + .expect("Time went back between frames"); + let time = f64::from(time.as_millis() as u32) / 1000.0; i = (i + 1) % 255; - if sin_offset > 1.0 { - sin_offset -= 1.0; - } - canvas.set_draw_color(Color::RGB(12, 12, 12)); canvas.clear(); @@ -73,7 +71,7 @@ pub fn main() { let f64_w = f64::from(w); let f64_h = f64::from(h); let sin_x = { - let mut sin_x = f64::from(x) + (sin_offset * f64_w); + let mut sin_x = f64::from(x) + ((time * movement_per_second) * f64_w); if sin_x > f64_w { sin_x = sin_x - f64_w; } @@ -91,7 +89,6 @@ pub fn main() { f[idx + 3] = if sin_y < y as usize { 255 } else { 0 }; } } - sin_offset += sin_speed; let sin_texture = Texture::from_surface(&sin_surface, &texture_creator).unwrap(); @@ -125,6 +122,6 @@ pub fn main() { } // The rest of the game loop goes here... canvas.present(); - ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 120)); + ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 12000)); } } |