diff options
| author | troido <troido@protonmail.com> | 2020-02-21 22:47:35 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-21 22:47:35 +0100 |
| commit | a24e17014f37318d08fc8224d38e4062c959f34e (patch) | |
| tree | 4a4044a2543f0c154d97dfe963c30eb8c4414ae6 /src/systems/view.rs | |
| parent | 7e9784f23d1920640152d1bc99a0725f6f22d529 (diff) | |
only send minimal data to the player
Diffstat (limited to 'src/systems/view.rs')
| -rw-r--r-- | src/systems/view.rs | 26 |
1 files changed, 12 insertions, 14 deletions
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<WorldUpdate> = 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); } } } |
