|
- use glc::vector::Vector4f;
- use space_crush_common::components::{Position, Ship, Velocity};
- use specs::{prelude::*, ReadStorage, System, World, WriteExpect};
-
- use crate::resources::Geometry;
-
- #[derive(Default)]
- pub struct Ships;
-
- #[derive(SystemData)]
- pub struct ShipsData<'a> {
- geometry: WriteExpect<'a, Geometry>,
- position: ReadStorage<'a, Position>,
- velocity: ReadStorage<'a, Velocity>,
- ship: ReadStorage<'a, Ship>,
- }
-
- impl<'a> System<'a> for Ships {
- type SystemData = ShipsData<'a>;
-
- fn run(&mut self, data: Self::SystemData) {
- let ShipsData {
- mut geometry,
- position,
- velocity,
- ship,
- } = data;
-
- gl::enable(gl::BLEND);
- gl::blend_func(gl::SRC_ALPHA, gl::ONE);
-
- for (p, v, s) in (&position, &velocity, &ship).join() {
- geometry.render_lines(
- Vector4f::new(0.0, 0.0, 1.0, 0.2),
- &[p.pos, p.pos + v.dir * v.speed],
- );
- geometry.render_lines(
- Vector4f::new(1.0, 0.0, 0.0, 0.2),
- &[p.pos, p.pos + s.target_dir * 100.0],
- );
- geometry.render_lines(Vector4f::new(1.0, 1.0, 1.0, 0.2), &[p.pos, s.target_pos]);
- }
-
- gl::disable(gl::BLEND);
- }
- }
|