use ecs::event::Event; use ecs::sole::Single; use ecs::{Component, Query, Sole, World}; #[derive(Component)] struct Ammo { ammo_left: u32, } #[derive(Sole, Default)] struct AmmoCounter { counter: u32, } fn count_ammo(query: Query<(Ammo,)>, mut ammo_counter: Single) { for (ammo,) in &query { println!("Found {} ammo", ammo.ammo_left); ammo_counter.counter += ammo.ammo_left; } } fn print_total_ammo_count(ammo_counter: Single) { println!("Total ammo count: {}", ammo_counter.counter); assert_eq!(ammo_counter.counter, 19); } #[derive(Debug)] struct EventA; impl Event for EventA {} #[derive(Debug)] struct EventB; impl Event for EventB {} fn main() { let mut world = World::new(); world.register_system(EventA, count_ammo); world.register_system(EventB, print_total_ammo_count); world.create_entity((Ammo { ammo_left: 4 },)); world.create_entity((Ammo { ammo_left: 7 },)); world.create_entity((Ammo { ammo_left: 8 },)); world.add_sole(AmmoCounter::default()).unwrap(); world.emit(EventA); world.emit(EventB); }