Skip to content

Commit b454712

Browse files
Fixed fetch for EventReader
Thanks @TheRawMeatball
1 parent 44e8dcb commit b454712

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

crates/bevy_ecs/src/event.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
component::Component,
3-
system::{Local, Query, ResMut, ResMutState, ResState, SystemParam},
3+
system::{LocalState, Query, ResMut, ResMutState, ResState, SystemParam},
44
};
55
use bevy_utils::tracing::trace;
66
use std::{
@@ -339,12 +339,22 @@ impl<'a, T: Component> EventWriter<'a, T> {
339339

340340
/// Reads events of type `T` in order and tracks which events have already been read.
341341
pub struct EventReader<'a, T: Component> {
342-
last_event_count: Local<'a, (usize, PhantomData<T>)>,
342+
last_event_count: EventCount<T>,
343343
events: &'a Events<T>,
344344
}
345345

346+
/// Wrapper struct used by [EventReader] to count events
347+
pub struct EventCount<T>(usize, PhantomData<T>);
348+
349+
// #[derive(Default)] doesn't handle PhantomData properly, so we're stuck with a manual impl
350+
impl<T> Default for EventCount<T> {
351+
fn default() -> Self {
352+
EventCount(0, PhantomData::default())
353+
}
354+
}
355+
346356
impl<'a, T: Component> SystemParam for EventReader<'a, T> {
347-
type Fetch = ResState<Events<T>>;
357+
type Fetch = (ResState<Events<T>>, LocalState<EventCount<T>>);
348358
}
349359

350360
impl<'a, T: Component> EventReader<'a, T> {

0 commit comments

Comments
 (0)