1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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());
}
}
|