From 9f65dba3afd4e8f20881914fc86fa997cb64a13d Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 21 Feb 2024 23:54:37 +0100 Subject: feat(ecs): add support for system local components --- ecs/examples/with_local.rs | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 ecs/examples/with_local.rs (limited to 'ecs/examples/with_local.rs') diff --git a/ecs/examples/with_local.rs b/ecs/examples/with_local.rs new file mode 100644 index 0000000..d7af0e0 --- /dev/null +++ b/ecs/examples/with_local.rs @@ -0,0 +1,76 @@ +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); +} -- cgit v1.2.3-18-g5258