From 5c9113431ea22c53cc59324c93ec3dc6efdfe926 Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 20 Aug 2025 14:17:14 +0200 Subject: feat(ecs): add support for pairs with target component as data --- ecs/examples/component_relationship.rs | 56 ++++++++++++++++++++++++++++++++++ ecs/examples/relationship.rs | 3 +- 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 ecs/examples/component_relationship.rs (limited to 'ecs/examples') diff --git a/ecs/examples/component_relationship.rs b/ecs/examples/component_relationship.rs new file mode 100644 index 0000000..4453e3a --- /dev/null +++ b/ecs/examples/component_relationship.rs @@ -0,0 +1,56 @@ +use ecs::pair::Pair; +use ecs::phase::START as START_PHASE; +use ecs::{Component, Query, World}; + +#[derive(Component)] +struct Person +{ + name: String, +} + +fn print_dog_likers(query: Query<(&Person, Pair)>) +{ + for (person, liked_dogs) in &query { + println!( + "{} likes {} dogs!", + person.name, + if liked_dogs.large { "large" } else { "small" }, + ); + } +} + +#[derive(Component)] +struct Likes; + +#[derive(Component)] +struct Cats; + +#[derive(Component)] +struct Dogs +{ + large: bool, +} + +fn main() +{ + let mut world = World::new(); + + world.register_system(*START_PHASE, print_dog_likers); + + world.create_entity(( + Person { name: "Irving".to_string() }, + Pair::new_with_comp_target::(Dogs { large: true }), + )); + + world.create_entity(( + Person { name: "Mark".to_string() }, + Pair::new_with_comp_target::(Cats), + )); + + world.create_entity(( + Person { name: "Helena".to_string() }, + Pair::new_with_comp_target::(Dogs { large: false }), + )); + + world.step(); +} diff --git a/ecs/examples/relationship.rs b/ecs/examples/relationship.rs index b607398..f99d090 100644 --- a/ecs/examples/relationship.rs +++ b/ecs/examples/relationship.rs @@ -1,6 +1,5 @@ -use ecs::pair::Pair; +use ecs::pair::{Pair, Wildcard}; use ecs::phase::START as START_PHASE; -use ecs::uid::Wildcard; use ecs::{Component, Query, World}; #[derive(Component)] -- cgit v1.2.3-18-g5258