diff options
| author | troido <troido@protonmail.com> | 2020-02-08 18:50:58 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-08 18:50:58 +0100 |
| commit | 3ebe9e6f792a0457c6f3b37b6e9d92c83f8694e2 (patch) | |
| tree | aaa81d23a4816ebecacc64593419d3d811b7283b /src/systems/create.rs | |
| parent | 7dfc7956a7c2df9a1df3ea0b32e0c3d2036fa3ce (diff) | |
don't rebuild the ground each step
Diffstat (limited to 'src/systems/create.rs')
| -rw-r--r-- | src/systems/create.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/systems/create.rs b/src/systems/create.rs new file mode 100644 index 0000000..35ef747 --- /dev/null +++ b/src/systems/create.rs @@ -0,0 +1,51 @@ + +use specs::{ + Read, + Write, + WriteStorage, + System, + Join, + Entities, + LazyUpdate, + Builder +}; + +use crate::components::{New, Position}; +use crate::resources::{NewEntities}; + + + +pub struct Create; +impl <'a> System<'a> for Create { + type SystemData = ( + Entities<'a>, + Write<'a, NewEntities>, + Read<'a, LazyUpdate>, + WriteStorage<'a, New> + ); + + fn run(&mut self, (entities, mut new_entities, updater, mut new): Self::SystemData) { + { + let mut ents = Vec::new(); + for (ent, _new) in (&entities, &new).join() { + ents.push(ent); + } + for ent in ents { + new.remove(ent); + } + } + for (pos, template) in &new_entities.templates { + 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);} + } + } + new_entities.templates.clear(); + } +} |
