use ecs::phase::{Phase, UPDATE as UPDATE_PHASE}; use ecs::relationship::{ChildOf, Relationship}; use ecs::sole::Single; use ecs::{static_entity, 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); } static_entity!( PRINT_AMMO_COUNT_PHASE, (Phase, >::new(*UPDATE_PHASE)) ); fn main() { let mut world = World::new(); world.register_system(*UPDATE_PHASE, count_ammo); world.register_system(*PRINT_AMMO_COUNT_PHASE, 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.step(); }