use crate::com::{Controlled, Velocity}; use crate::game::MyGame; use crate::res::KeySet; use specs::RunNow; pub struct Move; impl<'a> specs::System<'a> for Move { type SystemData = ( specs::ReadStorage<'a, Controlled>, specs::WriteStorage<'a, Velocity>, specs::Read<'a, KeySet>, ); fn run(&mut self, (movable, mut velocity, keys): Self::SystemData) { use specs::Join; for (_, vel) in (&movable, &mut velocity).join() { vel.dx = 0.0; vel.dy = 0.0; if keys.contains(&winit::VirtualKeyCode::W) { vel.dy -= 2.0; } if keys.contains(&winit::VirtualKeyCode::A) { vel.dx -= 2.0; } if keys.contains(&winit::VirtualKeyCode::S) { vel.dy += 2.0; } if keys.contains(&winit::VirtualKeyCode::D) { vel.dx += 2.0; } } } } pub fn systems(game: &mut MyGame) { Move.run_now(&game.world); }