#![allow(dead_code)] use specs::{prelude::*, ParJoin, Read, ReadStorage, System, WriteStorage}; use crate::{ components::{Position, Velocity}, resources::Global, }; #[derive(Default)] pub struct Movement; #[derive(SystemData)] pub struct MovementData<'a> { position: WriteStorage<'a, Position>, velocity: ReadStorage<'a, Velocity>, global: Read<'a, Global>, } impl<'a> System<'a> for Movement { type SystemData = MovementData<'a>; fn run(&mut self, data: Self::SystemData) { let MovementData { mut position, velocity, global, } = data; (&mut position, &velocity) .par_join() .for_each(|(position, velocity)| { position.pos = position.pos + velocity.dir * velocity.speed * global.delta; }); } }