summaryrefslogtreecommitdiff
path: root/src/systems/replace.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-05-12 21:51:37 +0200
committertroido <troido@protonmail.com>2020-05-12 21:51:37 +0200
commit1b380b31f50035f10f651e220effe8a2970c0fd5 (patch)
tree5a25b839a4ee70ba96f7f096161ea59c08842492 /src/systems/replace.rs
parent6c5b15758fbceef7987b40ee50a71ddc9624372d (diff)
removed 'substitute' part of encyclopedia
Diffstat (limited to 'src/systems/replace.rs')
-rw-r--r--src/systems/replace.rs46
1 files changed, 46 insertions, 0 deletions
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();
+ }
+ }
+}