From 4a4cdf7d148be0a2a756f323d27c0ee5b7976438 Mon Sep 17 00:00:00 2001 From: troido Date: Fri, 14 Feb 2020 14:36:32 +0100 Subject: extract the state to save --- src/systems/mod.rs | 1 - src/systems/moving.rs | 8 ++++---- src/systems/save.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ src/systems/take.rs | 8 +++----- src/systems/view.rs | 8 ++++---- 5 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/systems/save.rs (limited to 'src/systems') diff --git a/src/systems/mod.rs b/src/systems/mod.rs index 6989e95..7e75706 100644 --- a/src/systems/mod.rs +++ b/src/systems/mod.rs @@ -6,4 +6,3 @@ pub mod view; pub mod remove; pub mod create; pub mod take; - diff --git a/src/systems/moving.rs b/src/systems/moving.rs index 3e7803d..f5c1b4a 100644 --- a/src/systems/moving.rs +++ b/src/systems/moving.rs @@ -11,9 +11,9 @@ use specs::{ Write }; -use super::super::pos::Pos; +use crate::pos::Pos; -use super::super::components::{ +use crate::components::{ Controller, Blocking, Position, @@ -21,11 +21,11 @@ use super::super::components::{ Moved }; -use super::super::controls::{ +use crate::controls::{ Control }; -use super::super::resources::{ +use crate::resources::{ Size, Ground }; 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()); + } +} diff --git a/src/systems/take.rs b/src/systems/take.rs index f0e3990..affa3d1 100644 --- a/src/systems/take.rs +++ b/src/systems/take.rs @@ -10,9 +10,7 @@ use specs::{ Write }; -use super::super::pos::Pos; - -use super::super::components::{ +use crate::components::{ Controller, Position, Removed, @@ -20,8 +18,8 @@ use super::super::components::{ Item }; -use super::super::controls::{Control}; -use super::super::resources::{Ground, NewEntities}; +use crate::controls::{Control}; +use crate::resources::{Ground, NewEntities}; diff --git a/src/systems/view.rs b/src/systems/view.rs index 57e2b28..2bc971e 100644 --- a/src/systems/view.rs +++ b/src/systems/view.rs @@ -11,10 +11,10 @@ use specs::{ Entity }; -use super::super::pos::Pos; -use super::super::components::{Visible, Player, Position, Inventory, New, Moved, Removed, Health}; -use super::super::resources::{Size, Output, Ground}; -use super::super::worldmessages::{WorldMessage, WorldUpdate, FieldMessage}; +use crate::pos::Pos; +use crate::components::{Visible, Player, Position, Inventory, New, Moved, Removed, Health}; +use crate::resources::{Size, Output, Ground}; +use crate::worldmessages::{WorldMessage, WorldUpdate, FieldMessage}; #[derive(Default)] -- cgit