pong-cli 1.0.1

Play pong from the command-line!
Documentation
mod collision;

use super::system_prelude::*;
use collision::*;

#[derive(Default)]
pub struct MoveEntitiesSystem;

impl<'a> System<'a> for MoveEntitiesSystem {
    type SystemData = (
        Entities<'a>,
        Read<'a, Deltatime>,
        ReadStorage<'a, Size>,
        ReadStorage<'a, Velocity>,
        ReadStorage<'a, Collision>,
        WriteStorage<'a, Position>,
        WriteStorage<'a, Collider>,
    );

    fn run(
        &mut self,
        (
            entities,
            deltatime,
            sizes,
            velocities,
            collisions,
            mut positions,
            mut colliders,
        ): Self::SystemData,
    ) {
        let dt = deltatime.delta_seconds();

        let collision_grid =
            gen_collision_grid(&entities, &positions, &sizes, &collisions);

        for (
            entity,
            mut position,
            velocity,
            size_opt,
            collider_opt,
            collision_opt,
        ) in (
            &entities,
            &mut positions,
            &velocities,
            sizes.maybe(),
            (&mut colliders).maybe(),
            collisions.maybe(),
        )
            .join()
        {
            if let (Some(size), Some(mut collider), Some(collision)) =
                (size_opt, collider_opt, collision_opt)
            {
                run_with_collision(
                    dt,
                    &collision_grid,
                    &entity,
                    &mut position,
                    &velocity,
                    &size,
                    &mut collider,
                    &collision,
                );
            } else {
                position.x += velocity.x * dt;
                position.y += velocity.y * dt;
            }
        }
    }
}