diff options
author | HampusM <hampus@hampusmat.com> | 2025-10-15 18:40:19 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2025-10-15 19:13:21 +0200 |
commit | 7f3072ed7e016dff359439d7580403e36ad6b325 (patch) | |
tree | 706ae1a2e019c577229f1bdc7d1d22cbf1ca9086 /ecs/src/system/observer.rs | |
parent | b3bc691aedb46519e36db8e9eba0e37ac3cefb4a (diff) |
Diffstat (limited to 'ecs/src/system/observer.rs')
-rw-r--r-- | ecs/src/system/observer.rs | 23 |
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 |