use crate::atom::*;
use crate::integrator::Step;
use specs::{Component, Entities, Join, ReadExpect, ReadStorage, System};
pub struct MemoryOutputSystem<T: Component + Clone> {
pub interval: u64,
payload: Vec<Vec<T>>,
}
impl<T> MemoryOutputSystem<T>
where
T: Component + Clone,
{
pub fn new(interval: u64) -> Self {
MemoryOutputSystem {
interval,
payload: Vec::new(),
}
}
}
impl<'a, T> System<'a> for MemoryOutputSystem<T>
where
T: Component + Clone,
{
type SystemData = (
Entities<'a>,
ReadStorage<'a, T>,
ReadStorage<'a, Atom>,
ReadExpect<'a, Step>,
);
fn run(&mut self, (entities, data, atoms, step): Self::SystemData) {
if step.n % self.interval == 0 {
let mut vec = Vec::new();
for (data, _, _) in (&data, &atoms, &entities).join() {
vec.push(data.clone());
}
self.payload.push(vec);
}
}
}