From 1b380b31f50035f10f651e220effe8a2970c0fd5 Mon Sep 17 00:00:00 2001 From: troido Date: Tue, 12 May 2020 21:51:37 +0200 Subject: removed 'substitute' part of encyclopedia --- src/systems/replace.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/systems/replace.rs (limited to 'src/systems/replace.rs') diff --git a/src/systems/replace.rs b/src/systems/replace.rs new file mode 100644 index 0000000..4ed516b --- /dev/null +++ b/src/systems/replace.rs @@ -0,0 +1,46 @@ + +use specs::{ + ReadStorage, + System, + Join, + Write, + WriteStorage, + Entities +}; + +use crate::{ + components::{ + Position, + Substitute, + Removed, + Serialise + }, + resources::{NewEntities} +}; + + +pub struct Replace; +impl <'a> System<'a> for Replace { + type SystemData = ( + Entities<'a>, + ReadStorage<'a, Position>, + Write<'a, NewEntities>, + ReadStorage<'a, Substitute>, + WriteStorage<'a, Removed>, + ReadStorage<'a, Serialise> + ); + + fn run(&mut self, (entities, positions, mut new, substitutes, mut removeds, serialisations): Self::SystemData) { + for (entity, position, substitute, serialisation) in (&entities, &positions, &substitutes, (&serialisations).maybe()).join(){ + // todo: better error handling + let mut template = substitute.into.clone(); + if let Some(serialise) = serialisation { + // todo: extraction? + template = template.merge(serialise.template.clone()); + } + let preent = new.encyclopedia.construct(&template).unwrap(); + new.to_build.push((position.pos, preent)); + removeds.insert(entity, Removed).unwrap(); + } + } +} -- cgit