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, WriteStorage};

use super::{Sprite, SpriteGuide};

#[derive(Debug, Default)]
pub struct SpriteGuideSetupHandler<T, I>(PhantomData<(T, I)>);

impl<T, I> SetupHandler<SpriteGuide<T, I>> for SpriteGuideSetupHandler<T, I>
where
    T: 'static + Send + Sync,
    I: 'static + Send + Sync,
{
    #[inline]
    fn setup(res: &mut Resources) {
        if !res.has_value::<SpriteGuide<T, I>>() {
            let sprites = {
                let mut storage: WriteStorage<Sprite<T, I>> = SystemData::fetch(&res);
                SpriteGuide::<T, I>::new(storage.register_reader())
            };

            res.insert(sprites);
        }
    }
}