From 19ce5319e2250b7b0e1a188f69d24de282a85a7f Mon Sep 17 00:00:00 2001 From: troido Date: Mon, 3 Feb 2020 16:36:52 +0100 Subject: merged Draw into View; renamed Position to Pos --- src/systems/view.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/systems/view.rs') diff --git a/src/systems/view.rs b/src/systems/view.rs index da6d6c4..144a544 100644 --- a/src/systems/view.rs +++ b/src/systems/view.rs @@ -10,16 +10,15 @@ use specs::{ }; use super::super::components::{ - Position, + Pos, Visible, Played }; use super::super::resources::{ - TopView, Size, - Output, + Output }; use super::super::worldmessages::{ @@ -32,13 +31,18 @@ use super::super::worldmessages::{ pub struct View; impl <'a> System<'a> for View { - type SystemData = (Read<'a, TopView>, Read<'a, Size>, ReadStorage<'a, Played>, Write<'a, Output>); - fn run(&mut self, (topview, size, players, mut output): Self::SystemData) { + type SystemData = (ReadStorage<'a, Pos>, ReadStorage<'a, Visible>, Read<'a, Size>, ReadStorage<'a, Played>, Write<'a, Output>); + fn run(&mut self, (positions, visible, size, players, mut output): Self::SystemData) { + let mut cells: HashMap> = HashMap::new(); + for (pos, vis) in (&positions, &visible).join(){ + cells.entry(*pos).or_insert(Vec::new()).push(vis.clone()); + cells.get_mut(pos).unwrap().sort_by(|a, b| b.height.partial_cmp(&a.height).unwrap()); + } let width = size.width; let height = size.height; - let (values, mapping) = draw_room(&topview.cells, (width, height)); + let (values, mapping) = draw_room(cells, (width, height)); let message = WorldMessage{updates: vec![WorldUpdate::Field(FieldMessage{ width, @@ -54,14 +58,14 @@ impl <'a> System<'a> for View { } - -fn draw_room(cells: &HashMap>, (width, height): (i32, i32)) -> (Vec, Vec>){ +fn draw_room(cells: HashMap>, (width, height): (i32, i32)) -> (Vec, Vec>){ + let size = width * height; let mut values :Vec = Vec::with_capacity(size as usize); let mut mapping: Vec> = Vec::new(); for y in 0..height { for x in 0..width { - let sprites: Vec = match cells.get(&Position{x: x, y: y}) { + let sprites: Vec = match cells.get(&Pos{x: x, y: y}) { Some(sprites) => {sprites.iter().map(|v| v.sprite.clone()).collect()} None => {vec![]} }; -- cgit