diff --git a/crates/bevy_ecs/src/event.rs b/crates/bevy_ecs/src/event.rs index 889d9d22e8b4c..927e25d3c664c 100644 --- a/crates/bevy_ecs/src/event.rs +++ b/crates/bevy_ecs/src/event.rs @@ -336,6 +336,10 @@ impl Events { /// Creates a draining iterator that removes all events. pub fn drain(&mut self) -> impl Iterator + '_ { + self.a_start_event_count = 0; + self.b_start_event_count = 0; + self.event_count = 0; + let map = |i: EventInstance| i.event; match self.state { State::A => self @@ -480,4 +484,24 @@ mod tests { ) -> Vec { reader.iter(events).cloned().collect::>() } + + #[test] + fn test_events_drain() { + struct E; + let mut events = Events::::default(); + let mut reader = events.get_reader(); + + assert!(reader.iter(&events).next().is_none()); + + events.send(E); + assert!(reader.iter(&events).next().is_some()); + assert!(reader.iter(&events).next().is_none()); + + let _ = events.drain(); + assert!(reader.iter(&events).next().is_none()); + + events.send(E); + assert!(reader.iter(&events).next().is_some()); + assert!(reader.iter(&events).next().is_none()); + } }