use DataHelper;
use EntityData;
use {Process, System};
pub struct IntervalSystem<T: Process>
{
interval: u8,
ticker: u8,
inner: T,
}
impl<T: Process> IntervalSystem<T>
{
pub fn new(system: T, interval: u8) -> IntervalSystem<T>
{
IntervalSystem
{
interval: interval,
ticker: 0,
inner: system,
}
}
}
impl<T: Process> Process for IntervalSystem<T>
{
fn process(&mut self, c: &mut DataHelper<<T as System>::Components>)
{
self.ticker += 1;
if self.ticker == self.interval
{
self.ticker = 0;
self.inner.process(c);
}
}
}
impl<T: Process> System for IntervalSystem<T>
{
type Components = <T as System>::Components;
fn activated(&mut self, e: &EntityData, w: &<T as System>::Components)
{
self.inner.activated(e, w);
}
fn reactivated(&mut self, e: &EntityData, w: &<T as System>::Components)
{
self.inner.reactivated(e, w);
}
fn deactivated(&mut self, e: &EntityData, w: &<T as System>::Components)
{
self.inner.deactivated(e, w);
}
fn is_active(&self) -> bool
{
self.inner.is_active()
}
}