From f0153eefd580ec443b380504303620a61f24630b Mon Sep 17 00:00:00 2001 From: troido Date: Mon, 3 Feb 2020 16:13:58 +0100 Subject: refactored systems in their own file each --- src/systems/view.rs | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/systems/view.rs (limited to 'src/systems/view.rs') diff --git a/src/systems/view.rs b/src/systems/view.rs new file mode 100644 index 0000000..da6d6c4 --- /dev/null +++ b/src/systems/view.rs @@ -0,0 +1,82 @@ + +use std::collections::HashMap; + +use specs::{ + ReadStorage, + Read, + Write, + System, + Join +}; + +use super::super::components::{ + Position, + Visible, + Played +}; + + +use super::super::resources::{ + TopView, + Size, + Output, +}; + +use super::super::worldmessages::{ + WorldMessage, + WorldUpdate, + FieldMessage +}; + + + +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) { + + + let width = size.width; + let height = size.height; + let (values, mapping) = draw_room(&topview.cells, (width, height)); + + let message = WorldMessage{updates: vec![WorldUpdate::Field(FieldMessage{ + width, + height, + field: values, + mapping + })]}; + output.output.clear(); + for player in (&players).join() { + output.output.insert(player.name.clone(), message.clone()); + } + } +} + + + +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}) { + Some(sprites) => {sprites.iter().map(|v| v.sprite.clone()).collect()} + None => {vec![]} + }; + values.push( + match mapping.iter().position(|x| x == &sprites) { + Some(index) => { + index + } + None => { + mapping.push(sprites); + mapping.len() - 1 + } + } + ) + } + } + (values, mapping) +} -- cgit