summaryrefslogtreecommitdiff
path: root/src/room.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/room.rs')
-rw-r--r--src/room.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/room.rs b/src/room.rs
index 9aad22d..dbcfe0d 100644
--- a/src/room.rs
+++ b/src/room.rs
@@ -5,7 +5,8 @@ use specs::{
World,
WorldExt,
DispatcherBuilder,
- Dispatcher
+ Dispatcher,
+ Join
};
use super::controls::Action;
@@ -27,8 +28,10 @@ use super::systems::{
create::Create,
take::Take
};
+use crate::components::{Position, Serialise};
use crate::encyclopedia::Encyclopedia;
use crate::roomtemplate::RoomTemplate;
+use crate::savestate::SaveState;
@@ -45,6 +48,7 @@ impl <'a, 'b>Room<'a, 'b> {
templates: Vec::new(),
encyclopedia
});
+ world.register::<Serialise>();
let mut dispatcher = DispatcherBuilder::new()
.with(RegisterNew::default(), "registernew", &[])
@@ -78,7 +82,9 @@ impl <'a, 'b>Room<'a, 'b> {
let y = (idx as i64) / width;
for template in templates {
- self.world.fetch_mut::<NewEntities>().templates.push((Pos{x, y}, template.clone()));
+ let mut obj = template.clone();
+ obj.save = false;
+ self.world.fetch_mut::<NewEntities>().templates.push((Pos{x, y}, obj));
}
}
}
@@ -96,6 +102,16 @@ impl <'a, 'b>Room<'a, 'b> {
self.world.fetch_mut::<Input>().actions = actions;
}
+ pub fn save(&self) -> SaveState {
+ let positions = self.world.read_component::<Position>();
+ let serialisers = self.world.write_component::<Serialise>();
+ 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());
+ }
+ state
+ }
+
}