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 28 29 30 31 32
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 hierarchy = { let mut storage: WriteStorage<P> = SystemData::fetch(&res); SceneGraph::<P>::new( storage.track_modified(), storage.track_inserted(), storage.track_removed(), ) }; res.insert(hierarchy); } } }