|
- use glc::vector::{Vector2f, Vector4f};
- use space_crush_common::resources::Raster as RasterResource;
- use specs::{prelude::*, ReadExpect, System, World, WriteExpect};
-
- use crate::resources::Geometry;
-
- #[derive(Default)]
- pub struct Raster;
-
- #[derive(SystemData)]
- pub struct FleetData<'a> {
- geometry: WriteExpect<'a, Geometry>,
- raster: ReadExpect<'a, RasterResource>,
- }
-
- impl<'a> System<'a> for Raster {
- type SystemData = FleetData<'a>;
-
- fn run(&mut self, data: Self::SystemData) {
- let FleetData {
- mut geometry,
- raster,
- } = data;
-
- let s = raster.size();
-
- gl::enable(gl::BLEND);
- gl::blend_func(gl::SRC_ALPHA, gl::ONE);
-
- for (x, y, q) in raster.quads() {
- let a = if q.is_empty() { 0.05 } else { 0.5 };
-
- geometry.render_lines(
- Vector4f::new(1.0, 1.0, 1.0, a),
- &create_quad(x as _, y as _, s),
- );
- }
-
- gl::disable(gl::BLEND);
- }
- }
-
- fn create_quad(x: f32, y: f32, s: f32) -> Vec<Vector2f> {
- let f = s / 2.0;
- vec![
- Vector2f::new(x * s + f, y * s + f),
- Vector2f::new(x * s + f, y * s - f),
- Vector2f::new(x * s - f, y * s - f),
- Vector2f::new(x * s - f, y * s + f),
- Vector2f::new(x * s + f, y * s + f),
- ]
- }
|