@@ -12,7 +12,7 @@ use bevy_ecs_macros::SystemParam;
12
12
13
13
use std:: {
14
14
fmt:: Debug ,
15
- iter:: Cloned ,
15
+ iter:: { Cloned , Flatten } ,
16
16
marker:: PhantomData ,
17
17
ops:: { Deref , DerefMut } ,
18
18
} ;
@@ -117,27 +117,15 @@ pub struct RemovedComponents<'w, 's, T: Component> {
117
117
event_sets : & ' w RemovedComponentEvents ,
118
118
}
119
119
120
- pub enum MaybeIter < I : Iterator > {
121
- Iter ( I ) ,
122
- Empty ,
123
- }
120
+ type RemovedIter < ' a > = Flatten < std:: option:: IntoIter < Cloned < ManualEventIterator < ' a , Entity > > > > ;
124
121
125
- impl < I : Iterator > Iterator for MaybeIter < I > {
126
- type Item = I :: Item ;
127
- fn next ( & mut self ) -> Option < Self :: Item > {
128
- match self {
129
- MaybeIter :: Iter ( iter) => iter. next ( ) ,
130
- MaybeIter :: Empty => None ,
131
- }
132
- }
133
- }
134
122
impl < ' w , ' s , T : Component > RemovedComponents < ' w , ' s , T > {
135
- pub fn iter ( & mut self ) -> MaybeIter < Cloned < ManualEventIterator < ' _ , Entity > > > {
136
- if let Some ( events ) = self . event_sets . get ( * * self . component_id ) {
137
- MaybeIter :: Iter ( self . reader . iter ( events ) . cloned ( ) )
138
- } else {
139
- MaybeIter :: Empty
140
- }
123
+ pub fn iter ( & mut self ) -> RemovedIter < ' _ > {
124
+ self . event_sets
125
+ . get ( * * self . component_id )
126
+ . map ( |events| self . reader . iter ( events ) . cloned ( ) )
127
+ . into_iter ( )
128
+ . flatten ( )
141
129
}
142
130
}
143
131
@@ -146,7 +134,7 @@ where
146
134
T : Component ,
147
135
{
148
136
type Item = Entity ;
149
- type IntoIter = MaybeIter < Cloned < ManualEventIterator < ' a , Entity > > > ;
137
+ type IntoIter = RemovedIter < ' a > ;
150
138
fn into_iter ( self ) -> Self :: IntoIter {
151
139
self . iter ( )
152
140
}
0 commit comments