aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar memdmp <memdmpmemewarenet>2025-01-15 22:08:40 +0100
committerLibravatarLarge Libravatar memdmp <memdmpmemewarenet>2025-01-15 22:08:40 +0100
commit4bc7eb4014ac32558e1eef8d3a43a5f5a80207e2 (patch)
treeed9c2f22bb942658e3b758e56f66d5ed195576e4
parenta6666646dd91114b236c17449c03b1c609e23de5 (diff)
downloadcosin25-invite-mountainbytes-4bc7eb4014ac32558e1eef8d3a43a5f5a80207e2.tar.gz
cosin25-invite-mountainbytes-4bc7eb4014ac32558e1eef8d3a43a5f5a80207e2.tar.bz2
cosin25-invite-mountainbytes-4bc7eb4014ac32558e1eef8d3a43a5f5a80207e2.tar.lz
cosin25-invite-mountainbytes-4bc7eb4014ac32558e1eef8d3a43a5f5a80207e2.zip

feat: unbind from frame rate

-rw-r--r--src/main.rs21
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));
}
}