summaryrefslogtreecommitdiff
path: root/engine-ecs/examples/traversal.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine-ecs/examples/traversal.rs')
-rw-r--r--engine-ecs/examples/traversal.rs44
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();
+}