1234567891011121314151617181920212223242526272829303132333435363738394041 |
- use crate::components::{Controlled, Velocity};
- use crate::game::MyGame;
- use crate::resources::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);
- }
|