examples/queries/
query_transitive_queries.rs1use crate::z_ignore_test_common::*;
2
3use flecs_ecs::prelude::*;
4#[derive(Component)]
18struct LocatedIn;
19
20#[derive(Component)]
21struct Planet;
22
23#[derive(Component)]
24struct Continent;
25
26#[derive(Component)]
27struct Country;
28
29#[derive(Component)]
30struct State;
31
32#[derive(Component)]
33struct City;
34
35#[derive(Component)]
36struct Person;
37
38fn main() {
39 let world = World::new();
40
41 world.component::<LocatedIn>().add(flecs::Transitive);
43
44 let earth = world.entity_named("Earth").add(Planet);
46
47 let north_america = world
49 .entity_named("NorthAmerica")
50 .add(Continent)
51 .add((LocatedIn, earth));
52
53 let europe = world
54 .entity_named("Europe")
55 .add(Continent)
56 .add((LocatedIn, earth));
57
58 let united_states = world
60 .entity_named("UnitedStates")
61 .add(Country)
62 .add((LocatedIn, north_america));
63
64 let netherlands = world
65 .entity_named("Netherlands")
66 .add(Country)
67 .add((LocatedIn, europe));
68
69 let california = world
71 .entity_named("California")
72 .add(State)
73 .add((LocatedIn, united_states));
74
75 let washington = world
76 .entity_named("Washington")
77 .add(State)
78 .add((LocatedIn, united_states));
79
80 let noord_holland = world
81 .entity_named("NoordHolland")
82 .add(State)
83 .add((LocatedIn, netherlands));
84
85 let san_francisco = world
87 .entity_named("SanFrancisco")
88 .add(City)
89 .add((LocatedIn, california));
90
91 let seattle = world
92 .entity_named("Seattle")
93 .add(City)
94 .add((LocatedIn, washington));
95
96 let amsterdam = world
97 .entity_named("Amsterdam")
98 .add(City)
99 .add((LocatedIn, noord_holland));
100
101 world
103 .entity_named("Bob")
104 .add(Person)
105 .add((LocatedIn, san_francisco));
106
107 world
108 .entity_named("Alice")
109 .add(Person)
110 .add((LocatedIn, seattle));
111
112 world
113 .entity_named("Job")
114 .add(Person)
115 .add((LocatedIn, amsterdam));
116
117 let query = world
126 .query::<()>()
127 .with(&Person)
128 .with((LocatedIn, "$Location"))
129 .with(&Country)
130 .set_src("$Location")
131 .build();
132
133 let location_var = query.find_var("Location").unwrap();
136
137 query.each_iter(|it, index, _| {
139 println!("{} lives in {}", it.entity(index), it.get_var(location_var));
140 });
141
142 }
147
148#[cfg(feature = "flecs_nightly_tests")]
149#[test]
150fn test() {
151 let output_capture = OutputCapture::capture().unwrap();
152 main();
153 output_capture.test("query_transitive_queries".to_string());
154}