1use crate::{
2 components::{FinalTag, OnCompletion},
3 user::TaskUser,
4};
5
6use log::debug;
7use specs::prelude::*;
8
9pub struct TaskManagerSystem;
15
16impl<'a> System<'a> for TaskManagerSystem {
17 type SystemData = (TaskUser<'a>, WriteStorage<'a, FinalTag>);
18
19 fn run(&mut self, (task_user, mut finalized): Self::SystemData) {
20 let final_ents: Vec<(Entity, FinalTag)> = (&task_user.entities, &finalized)
21 .join()
22 .map(|(e, f)| (e, *f))
23 .collect();
24 for (entity, FinalTag { on_completion }) in final_ents.into_iter() {
25 let final_complete = task_user.maintain_entity_and_descendents(entity);
26 if final_complete {
27 match on_completion {
28 OnCompletion::Delete => {
29 task_user.delete_entity_and_descendents(entity);
30 }
31 OnCompletion::None => {
32 debug!("Removing FinalTag from {:?}", entity);
33 finalized.remove(entity);
34 }
35 }
36 }
37 }
38 }
39}