diff options
| author | troido <troido@protonmail.com> | 2020-02-18 01:11:49 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-18 01:11:49 +0100 |
| commit | c71ecb48fa4368035a852e2d06869a21382a6876 (patch) | |
| tree | 8d5a598fedf4e42bd6d8d1b0d476301dede2f20c /src/systems | |
| parent | c921686355c86afb5bf47e4b6c696057ede01b1f (diff) | |
Players are now saved/loaded too
Diffstat (limited to 'src/systems')
| -rw-r--r-- | src/systems/controlinput.rs | 37 | ||||
| -rw-r--r-- | src/systems/create.rs | 15 | ||||
| -rw-r--r-- | src/systems/take.rs | 2 |
3 files changed, 11 insertions, 43 deletions
diff --git a/src/systems/controlinput.rs b/src/systems/controlinput.rs index e9b1103..a2de78d 100644 --- a/src/systems/controlinput.rs +++ b/src/systems/controlinput.rs @@ -1,22 +1,15 @@ -use std::collections::{HashMap, HashSet}; - use specs::{ ReadStorage, WriteStorage, Read, - Write, Entities, System, Join }; -use crate::{PlayerId, hashmap}; -use crate::components::{Controller, Player, Removed}; -use crate::controls::{Control, Action}; -use crate::resources::{Input, NewEntities, Spawn}; -use crate::template::Template; -use crate::parameter::Parameter; +use crate::components::{Controller, Player}; +use crate::resources::{Input}; pub struct ControlInput; @@ -25,12 +18,9 @@ impl <'a> System<'a> for ControlInput { Entities<'a>, Read<'a, Input>, WriteStorage<'a, Controller>, - ReadStorage<'a, Player>, - Write<'a, NewEntities>, - Read<'a, Spawn>, - WriteStorage<'a, Removed> + ReadStorage<'a, Player> ); - fn run(&mut self, (entities, input, mut controllers, players, mut new, spawn, mut removed): Self::SystemData) { + fn run(&mut self, (entities, input, mut controllers, players): Self::SystemData) { { let mut ents = Vec::new(); for (ent, _controller) in (&*entities, &controllers).join() { @@ -41,27 +31,10 @@ impl <'a> System<'a> for ControlInput { } } - let mut playercontrols: HashMap<&PlayerId, Control> = HashMap::new(); - let mut leaving = HashSet::new(); - for action in &input.actions { - match action { - Action::Join(player) => { - new.templates.push(( - spawn.pos, - Template::new("player", hashmap!("name".to_string() => Parameter::String(player.name.clone()))).unsaved() - )); - } - Action::Leave(player) => {leaving.insert(player);} - Action::Input(player, control) => {playercontrols.insert(player, control.clone());} - } - } for (player, entity) in (&players, &entities).join() { - if let Some(control) = playercontrols.get(&player.id){ + if let Some(control) = input.actions.get(&player.id){ let _ = controllers.insert(entity, Controller(control.clone())); } - if leaving.contains(&player.id) { - let _ = removed.insert(entity, Removed); - } } } } diff --git a/src/systems/create.rs b/src/systems/create.rs index 35ef747..8463f9e 100644 --- a/src/systems/create.rs +++ b/src/systems/create.rs @@ -34,18 +34,13 @@ impl <'a> System<'a> for Create { new.remove(ent); } } - for (pos, template) in &new_entities.templates { + for (pos, preentity) in &new_entities.to_build { let mut builder = updater.create_entity(&entities); - match new_entities.encyclopedia.construct(template) { - Ok(comps) => { - for comp in comps { - builder = comp.build(builder); - } - builder.with(Position::new(*pos)).with(New).build(); - }, - Err(msg) => {println!("{}", msg);} + for comp in preentity { + builder = comp.build(builder); } + builder.with(Position::new(*pos)).with(New).build(); } - new_entities.templates.clear(); + new_entities.to_build.clear(); } } diff --git a/src/systems/take.rs b/src/systems/take.rs index affa3d1..bf0f8e8 100644 --- a/src/systems/take.rs +++ b/src/systems/take.rs @@ -53,7 +53,7 @@ impl <'a> System<'a> for Take { } Control::Drop(_rank) => { if let Some(item) = inventory.items.pop() { - new.templates.push((position.pos, item.ent)); + let _ = new.create(position.pos, item.ent); } } _ => {} |
