@@ -150,14 +150,14 @@ fn map_instance_event<T>(event_instance: &EventInstance<T>) -> &T {
150
150
}
151
151
152
152
/// Reads events of type `T` in order and tracks which events have already been read.
153
- #[ derive( SystemParam ) ]
153
+ #[ derive( SystemParam , Debug ) ]
154
154
pub struct EventReader < ' a , T : Component > {
155
155
last_event_count : Local < ' a , ( usize , PhantomData < T > ) > ,
156
156
events : Res < ' a , Events < T > > ,
157
157
}
158
158
159
159
/// Sends events of type `T`.
160
- #[ derive( SystemParam ) ]
160
+ #[ derive( SystemParam , Debug ) ]
161
161
pub struct EventWriter < ' a , T : Component > {
162
162
events : ResMut < ' a , Events < T > > ,
163
163
}
@@ -172,6 +172,7 @@ impl<'a, T: Component> EventWriter<'a, T> {
172
172
}
173
173
}
174
174
175
+ #[ derive( Debug ) ]
175
176
pub struct ManualEventReader < T > {
176
177
last_event_count : usize ,
177
178
_marker : PhantomData < T > ,
@@ -328,14 +329,25 @@ impl<T: Component> Events<T> {
328
329
events. update ( ) ;
329
330
}
330
331
332
+ #[ inline]
333
+ fn increment_start_event_count ( & mut self ) {
334
+ let count = self . event_count + 1 ;
335
+ self . a_start_event_count = count;
336
+ self . b_start_event_count = count;
337
+ }
338
+
331
339
/// Removes all events.
340
+ #[ inline]
332
341
pub fn clear ( & mut self ) {
342
+ self . increment_start_event_count ( ) ;
333
343
self . events_a . clear ( ) ;
334
344
self . events_b . clear ( ) ;
335
345
}
336
346
337
347
/// Creates a draining iterator that removes all events.
338
348
pub fn drain ( & mut self ) -> impl Iterator < Item = T > + ' _ {
349
+ self . increment_start_event_count ( ) ;
350
+
339
351
let map = |i : EventInstance < T > | i. event ;
340
352
match self . state {
341
353
State :: A => self
@@ -376,6 +388,8 @@ impl<T: Component> Events<T> {
376
388
377
389
#[ cfg( test) ]
378
390
mod tests {
391
+ use bevy_utils:: tracing:: event;
392
+
379
393
use super :: * ;
380
394
381
395
#[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
@@ -480,4 +494,40 @@ mod tests {
480
494
) -> Vec < TestEvent > {
481
495
reader. iter ( events) . cloned ( ) . collect :: < Vec < TestEvent > > ( )
482
496
}
497
+
498
+ #[ derive( PartialEq , Eq , Debug ) ]
499
+ struct E ( usize ) ;
500
+
501
+ fn events_clear_and_read_impl ( clear_func : impl FnOnce ( & mut Events < E > ) ) {
502
+ let mut events = Events :: < E > :: default ( ) ;
503
+ let mut reader = events. get_reader ( ) ;
504
+
505
+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
506
+
507
+ events. send ( E ( 0 ) ) ;
508
+ assert_eq ! ( * reader. iter( & events) . next( ) . unwrap( ) , E ( 0 ) ) ;
509
+ assert_eq ! ( reader. iter( & events) . next( ) , None ) ;
510
+
511
+ events. send ( E ( 1 ) ) ;
512
+ clear_func ( & mut events) ;
513
+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
514
+
515
+ events. send ( E ( 2 ) ) ;
516
+ events. update ( ) ;
517
+ events. send ( E ( 3 ) ) ;
518
+
519
+ assert ! ( reader. iter( & events) . eq( [ E ( 2 ) , E ( 3 ) ] . iter( ) ) ) ;
520
+ }
521
+
522
+ #[ test]
523
+ fn test_events_clear_and_read ( ) {
524
+ events_clear_and_read_impl ( |events| events. clear ( ) ) ;
525
+ }
526
+
527
+ #[ test]
528
+ fn test_events_drain_and_read ( ) {
529
+ events_clear_and_read_impl ( |events| {
530
+ assert ! ( events. drain( ) . eq( vec![ E ( 0 ) , E ( 1 ) ] . into_iter( ) ) ) ;
531
+ } ) ;
532
+ }
483
533
}
0 commit comments