@@ -33,6 +33,7 @@ pub struct EventId<E: Event> {
3333}
3434
3535impl < E : Event > Copy for EventId < E > { }
36+
3637impl < E : Event > Clone for EventId < E > {
3738 fn clone ( & self ) -> Self {
3839 * self
@@ -747,26 +748,43 @@ impl<'a, E: Event> ExactSizeIterator for EventIteratorWithId<'a, E> {
747748 }
748749}
749750
751+ #[ doc( hidden) ]
752+ #[ derive( Resource ) ]
753+ pub struct EventUpdateSignal < T : Event > {
754+ signal : bool ,
755+ _marker : PhantomData < fn ( ) -> T > ,
756+ }
757+
758+ impl < T : Event > Default for EventUpdateSignal < T > {
759+ fn default ( ) -> Self {
760+ Self {
761+ signal : false ,
762+ _marker : PhantomData ,
763+ }
764+ }
765+ }
766+
750767#[ doc( hidden) ]
751768#[ derive( Resource , Default ) ]
752- pub struct EventUpdateSignal ( bool ) ;
769+ pub struct EventUpdateShouldWaitForFixedUpdate ;
753770
754771/// A system that queues a call to [`Events::update`].
755- pub fn event_queue_update_system ( signal : Option < ResMut < EventUpdateSignal > > ) {
772+ pub fn event_queue_update_system < T : Event > ( signal : Option < ResMut < EventUpdateSignal < T > > > ) {
756773 if let Some ( mut s) = signal {
757- s. 0 = true ;
774+ s. signal = true ;
758775 }
759776}
760777
761778/// A system that calls [`Events::update`].
762779pub fn event_update_system < T : Event > (
763- signal : Option < ResMut < EventUpdateSignal > > ,
780+ should_wait : Option < Res < EventUpdateShouldWaitForFixedUpdate > > ,
781+ mut should_update : ResMut < EventUpdateSignal < T > > ,
764782 mut events : ResMut < Events < T > > ,
765783) {
766- if let Some ( mut s ) = signal {
784+ if should_wait . is_some ( ) {
767785 // If we haven't got a signal to update the events, but we *could* get such a signal
768786 // return early and update the events later.
769- if !std:: mem:: replace ( & mut s . 0 , false ) {
787+ if !std:: mem:: replace ( & mut should_update . signal , false ) {
770788 return ;
771789 }
772790 }
0 commit comments