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
33
34
35
36
37
38
39
40
41
42
43
use shred::{Fetch, FetchMut, ResourceId, Resources, SystemData};
use storage::MaskedStorage;
use {Component, EntitiesRes, Storage};
pub type ReadStorage<'a, T> = Storage<'a, T, Fetch<'a, MaskedStorage<T>>>;
impl<'a, T> SystemData<'a> for ReadStorage<'a, T>
where T: Component
{
fn fetch(res: &'a Resources, id: usize) -> Self {
Storage::new(res.fetch(0), res.fetch(id))
}
fn reads(id: usize) -> Vec<ResourceId> {
vec![ResourceId::new::<EntitiesRes>(),
ResourceId::new_with_id::<MaskedStorage<T>>(id)]
}
fn writes(_: usize) -> Vec<ResourceId> {
vec![]
}
}
pub type WriteStorage<'a, T> = Storage<'a, T, FetchMut<'a, MaskedStorage<T>>>;
impl<'a, T> SystemData<'a> for WriteStorage<'a, T>
where T: Component
{
fn fetch(res: &'a Resources, id: usize) -> Self {
Storage::new(res.fetch(0), res.fetch_mut(id))
}
fn reads(_: usize) -> Vec<ResourceId> {
vec![ResourceId::new::<EntitiesRes>()]
}
fn writes(id: usize) -> Vec<ResourceId> {
vec![ResourceId::new_with_id::<MaskedStorage<T>>(id)]
}
}