sort/
sort.rs

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}