1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use std::marker::PhantomData;

use shred::SetupHandler;
use specs::{Resources, SystemData, Tracked, WriteStorage};

use super::{Parent, SceneGraph};

#[derive(Debug, Default)]
pub struct SceneGraphSetupHandler<P>(PhantomData<P>);

impl<P> SetupHandler<SceneGraph<P>> for SceneGraphSetupHandler<P>
where
    P: Parent,
    P::Storage: Default + Tracked,
{
    #[inline]
    fn setup(res: &mut Resources) {
        if !res.has_value::<SceneGraph<P>>() {
            let scene_graph = {
                let mut storage: WriteStorage<P> = SystemData::fetch(&res);
                SceneGraph::<P>::new(storage.register_reader())
            };

            res.insert(scene_graph);
        }
    }
}