diff options
| author | troido <troido@protonmail.com> | 2020-02-14 14:36:32 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-14 14:36:32 +0100 |
| commit | 4a4cdf7d148be0a2a756f323d27c0ee5b7976438 (patch) | |
| tree | 7add0a0d735f93cb1fce6ae4f0c476a0d550a3ee /src/room.rs | |
| parent | 7821febc8ee4c89ca1825054e0baf39eea3a0380 (diff) | |
extract the state to save
Diffstat (limited to 'src/room.rs')
| -rw-r--r-- | src/room.rs | 20 |
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 + } + } |
