From a24e17014f37318d08fc8224d38e4062c959f34e Mon Sep 17 00:00:00 2001 From: troido Date: Fri, 21 Feb 2020 22:47:35 +0100 Subject: only send minimal data to the player --- src/systems/view.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'src/systems/view.rs') diff --git a/src/systems/view.rs b/src/systems/view.rs index f82ae0a..6e53eb1 100644 --- a/src/systems/view.rs +++ b/src/systems/view.rs @@ -14,7 +14,7 @@ use specs::{ use crate::{Pos, Sprite}; use crate::components::{Visible, Player, Position, Inventory, New, Moved, Removed, Health}; use crate::resources::{Size, Output, Ground}; -use crate::worldmessages::{WorldMessage, WorldUpdate, FieldMessage}; +use crate::worldmessages::{WorldMessage, FieldMessage}; #[derive(Default)] @@ -55,34 +55,32 @@ impl <'a> System<'a> for View { for pos in changed { changes.push((pos, cell_sprites(ground.cells.get(&pos).unwrap_or(&HashSet::new()), &visible))); } - let changed_msg = WorldUpdate::Change(changes); - - output.output.clear(); for (ent, player, pos) in (&entities, &players, &positions).join() { - let mut updates: Vec = Vec::new(); + let mut updates = WorldMessage::default(); if new.get(ent).is_some() { let (values, mapping) = draw_room(&ground.cells, (size.width, size.height), &visible); - let field = WorldUpdate::Field(FieldMessage{ + let field = FieldMessage{ width: size.width, height: size.height, field: values, mapping - }); - updates.push(field); + }; + updates.field = Some(field); } else if has_changed { - updates.push(changed_msg.clone()); + updates.change = Some(changes.clone()); } if let Some(inventory) = inventories.get(ent){ - updates.push(WorldUpdate::Inventory(inventory.items.iter().map(|item| item.name.clone()).collect())); + updates.inventory = Some(inventory.items.iter().map(|item| item.name.clone()).collect()); } if let Some(health) = healths.get(ent){ - updates.push(WorldUpdate::Health(health.health, health.maxhealth)); + updates.health = Some((health.health, health.maxhealth)); + } + updates.pos = Some(pos.pos); + if !updates.is_empty() { + output.output.insert(player.id.clone(), updates); } - updates.push(WorldUpdate::Pos(pos.pos)); - let message = WorldMessage{updates}; - output.output.insert(player.id.clone(), message); } } } -- cgit