use amethyst::ecs::{Entities, System};
use crossbeam_channel::Receiver;
use crate::types::EntityMessage;
pub(crate) struct EntityHandlerSystem {
receiver: Receiver<EntityMessage>,
}
impl EntityHandlerSystem {
pub(crate) fn new(receiver: Receiver<EntityMessage>) -> Self {
EntityHandlerSystem { receiver }
}
}
impl<'a> System<'a> for EntityHandlerSystem {
type SystemData = Option<Entities<'a>>;
fn run(&mut self, data: Self::SystemData) {
trace!("`CreateEntitiesSystem::run`");
let entities = match data {
Some(res) => res,
None => return,
};
while let Ok(message) = self.receiver.try_recv() {
match message {
EntityMessage::Create(amount) => {
let mut ids = Vec::with_capacity(amount);
for _ in 0..amount {
ids.push(entities.create().id());
}
}
EntityMessage::Destroy(ids) => {
for id in ids {
let entity = entities.entity(id);
let result = entities.delete(entity);
trace!("Result of destroying entity {:?}: {:?}", id, result);
}
}
}
}
}
}