diff options
| author | HampusM <hampus@hampusmat.com> | 2026-08-17 14:46:14 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-08-17 14:46:14 +0200 |
| commit | 4c4dd2b8bfa4655acbf03967f274e76440ec9530 (patch) | |
| tree | ec635a0d2dce3d49d4564f21cb2a9058190e88f4 /engine-ecs/examples | |
| parent | 11efaee7b80c5c9b8227d265874842da9a5f85fd (diff) | |
feat(engine-ecs): add query traversal kind SelfOrUp
Diffstat (limited to 'engine-ecs/examples')
| -rw-r--r-- | engine-ecs/examples/traversal.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/engine-ecs/examples/traversal.rs b/engine-ecs/examples/traversal.rs new file mode 100644 index 0000000..23b1d6a --- /dev/null +++ b/engine-ecs/examples/traversal.rs @@ -0,0 +1,44 @@ +use engine_ecs::pair::ChildOf; +use engine_ecs::phase::START as START_PHASE; +use engine_ecs::query::term::{Traverse, TraverseSelfOrUp}; +use engine_ecs::{pair, Component, Query, World}; + +#[derive(Component)] +struct SomeData +{ + num: u64, +} + +#[derive(Component)] +struct Greeting +{ + greeting: String, +} + +fn say_hello(query: Query<(Traverse<(&Greeting,), TraverseSelfOrUp, ChildOf>, &SomeData)>) +{ + for (greeting, data) in &query { + println!("{}: {}", greeting.greeting, data.num); + } +} + +fn main() +{ + let mut world = World::new(); + + world.register_system(*START_PHASE, say_hello); + + let parent_ent = world.spawn((Greeting { + greeting: "Good afternoon".to_string(), + },)); + + world.spawn((SomeData { num: 345 }, pair!(ChildOf, { parent_ent }))); + + world.spawn(( + SomeData { num: 123 }, + Greeting { greeting: "Good evening".to_string() }, + pair!(ChildOf, { parent_ent }), + )); + + world.step(); +} |
