Skip to content

Commit cb71e4d

Browse files
committed
Fix Events::drain bug
Co-authored-by: Alice-Cecile alice-i-cecile@users.noreply.github.com
1 parent d4ffa3f commit cb71e4d

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

crates/bevy_ecs/src/event.rs

+24
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,10 @@ impl<T: Component> Events<T> {
336336

337337
/// Creates a draining iterator that removes all events.
338338
pub fn drain(&mut self) -> impl Iterator<Item = T> + '_ {
339+
self.a_start_event_count = 0;
340+
self.b_start_event_count = 0;
341+
self.event_count = 0;
342+
339343
let map = |i: EventInstance<T>| i.event;
340344
match self.state {
341345
State::A => self
@@ -480,4 +484,24 @@ mod tests {
480484
) -> Vec<TestEvent> {
481485
reader.iter(events).cloned().collect::<Vec<TestEvent>>()
482486
}
487+
488+
#[test]
489+
fn test_events_drain() {
490+
struct E;
491+
let mut events = Events::<E>::default();
492+
let mut reader = events.get_reader();
493+
494+
assert!(reader.iter(&events).next().is_none());
495+
496+
events.send(E);
497+
assert!(reader.iter(&events).next().is_some());
498+
assert!(reader.iter(&events).next().is_none());
499+
500+
let _ = events.drain();
501+
assert!(reader.iter(&events).next().is_none());
502+
503+
events.send(E);
504+
assert!(reader.iter(&events).next().is_some());
505+
assert!(reader.iter(&events).next().is_none());
506+
}
483507
}

0 commit comments

Comments
 (0)