use ecs::actions::Actions; use ecs::component::Component; use ecs::event::component::Removed; use ecs::pair::Pair; use ecs::phase::UPDATE; use ecs::system::observer::Observe; use ecs::{Component, Query, World}; #[derive(Debug, Component)] struct Cheese; fn eat_cheese(query: Query<(&Cheese,)>, mut actions: Actions) { for (cheese_ent_id, (_,)) in query.iter_with_euids() { println!("Eating cheese!"); actions.remove_components(cheese_ent_id, [Cheese::id()]); } } fn on_cheese_removed(observe: Observe>) { for cheese_ent in &observe { println!("Cheese entity {} was eaten", cheese_ent.uid()); } } fn main() { let mut world = World::new(); world.register_system(*UPDATE, eat_cheese); world.register_observer(on_cheese_removed); world.create_entity((Cheese,)); world.step(); world.step(); }