1extern crate specs;
2extern crate specs_hierarchy;
3
4use specs::prelude::*;
5use specs_hierarchy::{Hierarchy, HierarchySystem};
6
7struct Parent {
8 entity: Entity,
9}
10
11impl Component for Parent {
12 type Storage = FlaggedStorage<Self, DenseVecStorage<Self>>;
13}
14
15impl specs_hierarchy::Parent for Parent {
16 fn parent_entity(&self) -> Entity {
17 self.entity
18 }
19}
20
21fn main() {
22 let mut world = World::new();
23 let mut dispatcher = DispatcherBuilder::new()
24 .with(
25 HierarchySystem::<Parent>::new(&mut world),
26 "hierarchy_system",
27 &[],
28 )
29 .build();
30 dispatcher.setup(&mut world);
31
32 let _e0 = world.create_entity().build();
33 let e1 = world.create_entity().build();
34 let e2 = world.create_entity().build();
35 let e3 = world.create_entity().build();
36 let e4 = world.create_entity().build();
37 let e5 = world.create_entity().build();
38 let _e6 = world.create_entity().build();
39 let _e7 = world.create_entity().build();
40 let _e8 = world.create_entity().build();
41 let _e9 = world.create_entity().build();
42
43 {
44 let mut parents = world.write_storage::<Parent>();
45 parents.insert(e1, Parent { entity: e5 }).unwrap();
46 parents.insert(e3, Parent { entity: e1 }).unwrap();
47 parents.insert(e4, Parent { entity: e5 }).unwrap();
48 parents.insert(e5, Parent { entity: e2 }).unwrap();
49 }
50
51 dispatcher.dispatch(&mut world);
52
53 {
54 let parents = world.read_storage::<Parent>();
55 for entity in world.read_resource::<Hierarchy<Parent>>().all() {
56 let formatted = parents
57 .get(*entity)
58 .map(|parent| format!("{:?}", parent.entity))
59 .unwrap_or(format!("None"));
60 println!("{:?}: {}", entity, formatted);
61 }
62 }
63}