Skip to content

Commit 17566d4

Browse files
committed
feat(core/game_loop): initial implementation
1 parent 2387412 commit 17566d4

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/core/game_loop.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use std::time::{Duration, Instant};
2+
3+
pub fn game_loop<T: FnMut(), F: FnMut(f32)>(ticks_per_second: &f32, mut tick: T, mut frame: F) {
4+
let mut tick_delta = 1.0 / ticks_per_second;
5+
let mut tick_timer = Instant::now();
6+
7+
let mut delta_time = 0.0;
8+
9+
loop {
10+
let frame_timer = Instant::now();
11+
if tick_timer.elapsed().as_secs_f32() > tick_delta {
12+
tick();
13+
tick_delta = 1.0 / ticks_per_second;
14+
tick_timer = Instant::now();
15+
}
16+
frame(delta_time);
17+
delta_time = frame_timer.elapsed().as_secs_f32();
18+
}
19+
}

src/core/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod game_loop;

src/main.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
mod core;
12
mod modules;
2-
use crate::modules::*;
3+
use std::{io::Write, thread::sleep};
4+
5+
use crate::{core::game_loop::game_loop, modules::*};
36
use mlua::prelude::*;
47
use simplelog::*;
58
use std::{fs::File, path::Path};
69

710
fn main() -> LuaResult<()> {
811
let lua = init();
912
lua.load(Path::new("main.lua")).exec()?;
13+
14+
game_loop(&60.0, || {}, |dt| {});
15+
1016
Ok(())
1117
}
1218

0 commit comments

Comments
 (0)