use ecs::component::Local; use ecs::system::{Into, System}; use ecs::{Query, World}; struct SomeData { num: u64, } struct Name { name: String, } struct SayHelloState { cnt: usize, } fn say_hello(mut query: Query<(SomeData, String)>, mut state: Local) { for (data, text) in query.iter_mut() { println!("Hello there. Count {}: {}: {}", state.cnt, text, data.num); state.cnt += 1; } } fn say_whats_up(mut query: Query<(SomeData, Name)>, mut state: Local) { for (data, name) in query.iter_mut() { println!( "Whats up, {}. Number is {}. Count {}", name.name, data.num, state.cnt ); state.cnt += 1; } } #[derive(Debug, PartialEq, Eq, Hash)] enum Event { Update, } fn main() { let mut world = World::::new(); world.register_system( Event::Update, say_hello.into_system().initialize(SayHelloState { cnt: 0 }), ); world.register_system( Event::Update, say_whats_up .into_system() .initialize(SayHelloState { cnt: 0 }), ); world.create_entity(( SomeData { num: 987_654 }, "Yoo".to_string(), Name { name: "Bob".to_string() }, )); world.create_entity((SomeData { num: 345 }, "Haha".to_string())); world.emit(&Event::Update); println!("Haha"); world.emit(&Event::Update); }