diff options
Diffstat (limited to 'src/systems/save.rs')
| -rw-r--r-- | src/systems/save.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/systems/save.rs b/src/systems/save.rs new file mode 100644 index 0000000..924533a --- /dev/null +++ b/src/systems/save.rs @@ -0,0 +1,43 @@ + +use std::collections::HashMap; + +use specs::{ + Entities, + ReadStorage, + System, + Join, + Read +}; + +use crate::pos::Pos; + +use crate::components::{ + Position, + Serialise +}; + +use crate::savestate::SaveState; + +const INTERVAL: i32 = 20; + +pub struct Save(pub i32); +impl <'a> System<'a> for Save { + type SystemData = ( + Entities<'a>, + ReadStorage<'a, Position>, + ReadStorage<'a, Serialise>, + ); + + fn run(&mut self, (entities, positions, serialisers): Self::SystemData) { + self.0 -= 1; + if self.0 > 0 { + return + } + self.0 = INTERVAL; + let mut state = SaveState::new(); + for (pos, serialiser) in (&positions, &serialisers).join() { + state.changes.entry(pos.pos).or_insert(Vec::new()).push(serialiser.template.clone()); + } + println!("save {}", state.to_json().to_string()); + } +} |
