1#![allow(missing_docs)]
2use xuko_ecs::{Query, QueryFilter, World, component_id};
3
4fn main() {
5 let mut world = World::new();
6
7 struct Name(String);
8 struct Age(u8);
9 struct Human;
10
11 let people = [
12 (Name("Alice".to_owned()), Age(20)),
13 (Name("Bob".to_owned()), Age(26)),
14 (Name("Cathrine".to_owned()), Age(33)),
15 (Name("Dennis".to_owned()), Age(10)),
16 ];
17
18 for (name, age) in people {
19 let entity = world.spawn();
20 let entity = world.get_entity_mut(entity).unwrap();
21
22 entity.add(name);
23 entity.add(age);
24 entity.add(Human);
25 }
26
27 {
28 let entity = world.spawn();
29 let entity = world.get_entity_mut(entity).unwrap();
30
31 entity.add(Name("Jupiter".to_owned()));
32 }
33
34 for e in &Query::query_world(
35 &world,
36 QueryFilter {
37 requires: vec![
38 component_id!(Name),
39 component_id!(Age),
40 component_id!(Human),
41 ],
42 ..Default::default()
43 },
44 ) {
45 let e = world.get_entity_mut(e).unwrap();
46 let age = e.get::<Age>().map(|x| Age(x.0)).unwrap();
47 let name = e.get_mut::<Name>().unwrap();
48
49 name.0 = name.0.to_uppercase();
50 println!("Found human named {}, who is {} years old", name.0, age.0);
51 }
52
53 for e in &Query::query_world(
54 &world,
55 QueryFilter {
56 requires: vec![component_id!(Name)],
57 ..Default::default()
58 },
59 ) {
60 let entity = world.get_entity(e).unwrap();
61 let name = entity.get::<Name>().unwrap();
62
63 println!("This entity (#{e}) has a name: {}", name.0);
64 }
65}