specs_scene_graph/
scene_graph_setup_handler.rs

1use std::marker::PhantomData;
2
3use shred::SetupHandler;
4use specs::{SystemData,World, Tracked, WriteStorage};
5
6use super::{Parent, SceneGraph};
7
8#[derive(Debug, Default)]
9pub struct SceneGraphSetupHandler<P>(PhantomData<P>);
10
11impl<P> SetupHandler<SceneGraph<P>> for SceneGraphSetupHandler<P>
12where
13    P: Parent,
14    P::Storage: Default + Tracked,
15{
16    #[inline]
17    fn setup(world: &mut World) {
18        if !world.has_value::<SceneGraph<P>>() {
19            let scene_graph = {
20                let mut storage: WriteStorage<P> = SystemData::fetch(&world);
21                SceneGraph::<P>::new(storage.register_reader())
22            };
23
24            world.insert(scene_graph);
25        }
26    }
27}