From 6de8cfc84edbc80196ad144f2886031a898f5ed7 Mon Sep 17 00:00:00 2001 From: Arne Dußin Date: Fri, 7 May 2021 18:06:02 +0200 Subject: Add player movement --- src/systems/movement.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/systems/movement.rs (limited to 'src/systems/movement.rs') diff --git a/src/systems/movement.rs b/src/systems/movement.rs new file mode 100644 index 0000000..61c572a --- /dev/null +++ b/src/systems/movement.rs @@ -0,0 +1,43 @@ +use std::time::{Duration, Instant}; + +use specs::prelude::*; + +use crate::components::{Pos, Velocity}; + +pub struct SysMovement +{ + delta_time: Duration, + last_run: Instant, +} + +impl SysMovement +{ + pub fn new() -> Self + { + Self { + delta_time: Duration::ZERO, + last_run: Instant::now(), + } + } +} + +impl Default for SysMovement +{ + fn default() -> Self { Self::new() } +} + +impl<'a> System<'a> for SysMovement +{ + type SystemData = (WriteStorage<'a, Pos>, ReadStorage<'a, Velocity>); + + fn run(&mut self, (mut pos, vel): Self::SystemData) + { + let now = Instant::now(); + self.delta_time = now - self.last_run; + self.last_run = now; + + for (pos, vel) in (&mut pos, &vel).join() { + pos.0 += vel.0 * self.delta_time.as_secs_f64(); + } + } +} -- cgit v1.2.3-70-g09d2