diff options
Diffstat (limited to 'light-client/src/main.rs')
-rw-r--r-- | light-client/src/main.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/light-client/src/main.rs b/light-client/src/main.rs index 8be38e4c..b00ba734 100644 --- a/light-client/src/main.rs +++ b/light-client/src/main.rs @@ -17,8 +17,13 @@ */ use game::Game; use network::Network; -use sdl2::{event::Event, keyboard::Keycode, pixels::Color}; +use sdl2::{ + event::Event, + keyboard::{KeyboardState, Keycode}, + pixels::Color, +}; use sprite_renderer::SpriteRenderer; +use std::time::{Duration, Instant}; pub mod game; pub mod network; @@ -55,6 +60,10 @@ fn main() { character: 0, }); + let mut events = sdl_context.event_pump().unwrap(); + + let mut last_tick = Instant::now(); + 'mainloop: loop { net.poll(); @@ -62,6 +71,11 @@ fn main() { game.packet_in(packet, &mut renderer); } + let keyboard = KeyboardState::new(&events); + let dt = last_tick.elapsed().min(Duration::from_secs_f32(1. / 30.)); + game.tick(dt.as_secs_f32(), &keyboard, &mut net.queue_out); + last_tick += dt; + game.draw(&mut renderer); canvas.set_draw_color(Color::BLACK); @@ -69,7 +83,7 @@ fn main() { renderer.submit(&mut canvas); canvas.present(); - for event in sdl_context.event_pump().unwrap().poll_iter() { + for event in events.poll_iter() { match event { Event::Quit { .. } | Event::KeyDown { |