use std::{any::TypeId, collections::HashMap};
use super::{entity::Entities, event::Events, system::System};
#[derive(Default)]
pub struct Schedule {
systems: HashMap<TypeId, Vec<Box<dyn System>>>,
}
impl Schedule {
pub fn add_system<TSchedule, TSystem>(&mut self, _: TSchedule, system: TSystem)
where
TSchedule: 'static,
TSystem: System + 'static,
{
let id = TypeId::of::<TSchedule>();
self.systems
.entry(id)
.or_insert(vec![])
.push(Box::new(system));
}
pub fn run_schedule<TSchedule>(&self, _: TSchedule, entities: &mut Entities, events: &mut Events)
where
TSchedule: 'static,
{
let id = TypeId::of::<TSchedule>();
self.systems
.get(&id)
.map(|s| s.iter().for_each(|s| s.run(entities, events)));
}
}
pub struct Startup;
pub struct Update;
pub struct FixedUpdate;
pub struct Shutdown;