summaryrefslogtreecommitdiff
path: root/ecs/src/system/observer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ecs/src/system/observer.rs')
-rw-r--r--ecs/src/system/observer.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/ecs/src/system/observer.rs b/ecs/src/system/observer.rs
index b7d84be..236420c 100644
--- a/ecs/src/system/observer.rs
+++ b/ecs/src/system/observer.rs
@@ -82,18 +82,19 @@ impl<'world, ObservedT: Observed> Observe<'world, ObservedT>
impl<ObservedT: Observed> Observe<'_, ObservedT>
{
#[must_use]
- pub fn iter(&self) -> ObserveIter<'_>
+ pub fn iter(&self) -> ObserveIter<'_, ObservedT>
{
ObserveIter {
world: self.world,
inner: self.emitted_event.match_ids.iter(),
+ _pd: PhantomData,
}
}
}
impl<'a, ObservedT: Observed> IntoIterator for &'a Observe<'_, ObservedT>
{
- type IntoIter = ObserveIter<'a>;
+ type IntoIter = ObserveIter<'a, ObservedT>;
type Item = <Self::IntoIter as Iterator>::Item;
fn into_iter(self) -> Self::IntoIter
@@ -102,33 +103,39 @@ impl<'a, ObservedT: Observed> IntoIterator for &'a Observe<'_, ObservedT>
}
}
-pub struct ObserveIter<'observe>
+pub struct ObserveIter<'observe, ObservedT: Observed>
{
world: &'observe World,
inner: SliceIter<'observe, Uid>,
+ _pd: PhantomData<ObservedT>,
}
-impl<'observe> Iterator for ObserveIter<'observe>
+impl<'observe, ObservedT: Observed> Iterator for ObserveIter<'observe, ObservedT>
{
- type Item = EventMatch<'observe>;
+ type Item = EventMatch<'observe, ObservedT>;
fn next(&mut self) -> Option<Self::Item>
{
let match_id = *self.inner.next()?;
- Some(EventMatch { world: self.world, id: match_id })
+ Some(EventMatch {
+ world: self.world,
+ id: match_id,
+ _pd: PhantomData,
+ })
}
}
/// A event match.
#[derive(Debug)]
-pub struct EventMatch<'world>
+pub struct EventMatch<'world, ObservedT: Observed>
{
world: &'world World,
id: Uid,
+ _pd: PhantomData<ObservedT>,
}
-impl<'world> EventMatch<'world>
+impl<'world, ObservedT: Observed> EventMatch<'world, ObservedT>
{
#[must_use]
pub fn id(&self) -> Uid