summaryrefslogtreecommitdiff
path: root/src/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems')
-rw-r--r--src/systems/mod.rs1
-rw-r--r--src/systems/moving.rs8
-rw-r--r--src/systems/save.rs43
-rw-r--r--src/systems/take.rs8
-rw-r--r--src/systems/view.rs8
5 files changed, 54 insertions, 14 deletions
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)]