Rename RemovedComponents::iter/iter_with_id to read/read_with_id (#9778)
# Objective Rename RemovedComponents::iter/iter_with_id to read/read_with_id to make it clear that it consume the data Fixes #9755. (It's my first pull request, if i've made any mistake, please let me know) ## Solution Refactor RemovedComponents::iter/iter_with_id to read/read_with_id ## Changelog Refactor RemovedComponents::iter/iter_with_id to read/read_with_id Deprecate RemovedComponents::iter/iter_with_id Remove IntoIterator implementation Update removal_detection example accordingly --- ## Migration Guide Rename calls of RemovedComponents::iter/iter_with_id to read/read_with_id Replace IntoIterator iteration (&mut <RemovedComponents>) with .read() --------- Co-authored-by: denshi_ika <mojang2824@gmail.com>
This commit is contained in:
		
							parent
							
								
									0607116699
								
							
						
					
					
						commit
						9ee9d627d7
					
				@ -200,7 +200,7 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
 | 
				
			|||||||
    /// Iterates over the events this [`RemovedComponents`] has not seen yet. This updates the
 | 
					    /// Iterates over the events this [`RemovedComponents`] has not seen yet. This updates the
 | 
				
			||||||
    /// [`RemovedComponents`]'s event counter, which means subsequent event reads will not include events
 | 
					    /// [`RemovedComponents`]'s event counter, which means subsequent event reads will not include events
 | 
				
			||||||
    /// that happened before now.
 | 
					    /// that happened before now.
 | 
				
			||||||
    pub fn iter(&mut self) -> RemovedIter<'_> {
 | 
					    pub fn read(&mut self) -> RemovedIter<'_> {
 | 
				
			||||||
        self.reader_mut_with_events()
 | 
					        self.reader_mut_with_events()
 | 
				
			||||||
            .map(|(reader, events)| reader.read(events).cloned())
 | 
					            .map(|(reader, events)| reader.read(events).cloned())
 | 
				
			||||||
            .into_iter()
 | 
					            .into_iter()
 | 
				
			||||||
@ -208,8 +208,16 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
 | 
				
			|||||||
            .map(RemovedComponentEntity::into)
 | 
					            .map(RemovedComponentEntity::into)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Like [`iter`](Self::iter), except also returning the [`EventId`] of the events.
 | 
					    /// Iterates over the events this [`RemovedComponents`] has not seen yet. This updates the
 | 
				
			||||||
    pub fn iter_with_id(&mut self) -> RemovedIterWithId<'_> {
 | 
					    /// [`RemovedComponents`]'s event counter, which means subsequent event reads will not include events
 | 
				
			||||||
 | 
					    /// that happened before now.
 | 
				
			||||||
 | 
					    #[deprecated = "use `.read()` instead."]
 | 
				
			||||||
 | 
					    pub fn iter(&mut self) -> RemovedIter<'_> {
 | 
				
			||||||
 | 
					        self.read()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Like [`read`](Self::read), except also returning the [`EventId`] of the events.
 | 
				
			||||||
 | 
					    pub fn read_with_id(&mut self) -> RemovedIterWithId<'_> {
 | 
				
			||||||
        self.reader_mut_with_events()
 | 
					        self.reader_mut_with_events()
 | 
				
			||||||
            .map(|(reader, events)| reader.read_with_id(events))
 | 
					            .map(|(reader, events)| reader.read_with_id(events))
 | 
				
			||||||
            .into_iter()
 | 
					            .into_iter()
 | 
				
			||||||
@ -217,6 +225,12 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
 | 
				
			|||||||
            .map(map_id_events)
 | 
					            .map(map_id_events)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Like [`iter`](Self::iter), except also returning the [`EventId`] of the events.
 | 
				
			||||||
 | 
					    #[deprecated = "use `.read_with_id()` instead."]
 | 
				
			||||||
 | 
					    pub fn iter_with_id(&mut self) -> RemovedIterWithId<'_> {
 | 
				
			||||||
 | 
					        self.read_with_id()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Determines the number of removal events available to be read from this [`RemovedComponents`] without consuming any.
 | 
					    /// Determines the number of removal events available to be read from this [`RemovedComponents`] without consuming any.
 | 
				
			||||||
    pub fn len(&self) -> usize {
 | 
					    pub fn len(&self) -> usize {
 | 
				
			||||||
        self.events()
 | 
					        self.events()
 | 
				
			||||||
@ -233,8 +247,8 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /// Consumes all available events.
 | 
					    /// Consumes all available events.
 | 
				
			||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// This means these events will not appear in calls to [`RemovedComponents::iter()`] or
 | 
					    /// This means these events will not appear in calls to [`RemovedComponents::read()`] or
 | 
				
			||||||
    /// [`RemovedComponents::iter_with_id()`] and [`RemovedComponents::is_empty()`] will return `true`.
 | 
					    /// [`RemovedComponents::read_with_id()`] and [`RemovedComponents::is_empty()`] will return `true`.
 | 
				
			||||||
    pub fn clear(&mut self) {
 | 
					    pub fn clear(&mut self) {
 | 
				
			||||||
        if let Some((reader, events)) = self.reader_mut_with_events() {
 | 
					        if let Some((reader, events)) = self.reader_mut_with_events() {
 | 
				
			||||||
            reader.clear(events);
 | 
					            reader.clear(events);
 | 
				
			||||||
@ -242,17 +256,6 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a, 'w, 's: 'a, T> IntoIterator for &'a mut RemovedComponents<'w, 's, T>
 | 
					 | 
				
			||||||
where
 | 
					 | 
				
			||||||
    T: Component,
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    type Item = Entity;
 | 
					 | 
				
			||||||
    type IntoIter = RemovedIter<'a>;
 | 
					 | 
				
			||||||
    fn into_iter(self) -> Self::IntoIter {
 | 
					 | 
				
			||||||
        self.iter()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SAFETY: Only reads World removed component events
 | 
					// SAFETY: Only reads World removed component events
 | 
				
			||||||
unsafe impl<'a> ReadOnlySystemParam for &'a RemovedComponentEvents {}
 | 
					unsafe impl<'a> ReadOnlySystemParam for &'a RemovedComponentEvents {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -943,7 +943,7 @@ pub mod common_conditions {
 | 
				
			|||||||
        // Simply checking `is_empty` would not be enough.
 | 
					        // Simply checking `is_empty` would not be enough.
 | 
				
			||||||
        // PERF: note that `count` is efficient (not actually looping/iterating),
 | 
					        // PERF: note that `count` is efficient (not actually looping/iterating),
 | 
				
			||||||
        // due to Bevy having a specialized implementation for events.
 | 
					        // due to Bevy having a specialized implementation for events.
 | 
				
			||||||
        move |mut removals: RemovedComponents<T>| removals.iter().count() != 0
 | 
					        move |mut removals: RemovedComponents<T>| removals.read().count() != 0
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Generates a [`Condition`](super::Condition) that inverses the result of passed one.
 | 
					    /// Generates a [`Condition`](super::Condition) that inverses the result of passed one.
 | 
				
			||||||
 | 
				
			|||||||
@ -1172,7 +1172,7 @@ mod tests {
 | 
				
			|||||||
            mut n_systems: ResMut<NSystems>,
 | 
					            mut n_systems: ResMut<NSystems>,
 | 
				
			||||||
        ) {
 | 
					        ) {
 | 
				
			||||||
            assert_eq!(
 | 
					            assert_eq!(
 | 
				
			||||||
                removed_i32.iter().collect::<Vec<_>>(),
 | 
					                removed_i32.read().collect::<Vec<_>>(),
 | 
				
			||||||
                &[despawned.0],
 | 
					                &[despawned.0],
 | 
				
			||||||
                "despawning causes the correct entity to show up in the 'RemovedComponent' system parameter."
 | 
					                "despawning causes the correct entity to show up in the 'RemovedComponent' system parameter."
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
@ -1200,7 +1200,7 @@ mod tests {
 | 
				
			|||||||
            // The despawned entity from the previous frame was
 | 
					            // The despawned entity from the previous frame was
 | 
				
			||||||
            // double buffered so we now have it in this system as well.
 | 
					            // double buffered so we now have it in this system as well.
 | 
				
			||||||
            assert_eq!(
 | 
					            assert_eq!(
 | 
				
			||||||
                removed_i32.iter().collect::<Vec<_>>(),
 | 
					                removed_i32.read().collect::<Vec<_>>(),
 | 
				
			||||||
                &[despawned.0, removed.0],
 | 
					                &[despawned.0, removed.0],
 | 
				
			||||||
                "removing a component causes the correct entity to show up in the 'RemovedComponent' system parameter."
 | 
					                "removing a component causes the correct entity to show up in the 'RemovedComponent' system parameter."
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@ pub fn sync_simple_transforms(
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    // Update orphaned entities.
 | 
					    // Update orphaned entities.
 | 
				
			||||||
    let mut query = query.p1();
 | 
					    let mut query = query.p1();
 | 
				
			||||||
    let mut iter = query.iter_many_mut(orphaned.iter());
 | 
					    let mut iter = query.iter_many_mut(orphaned.read());
 | 
				
			||||||
    while let Some((transform, mut global_transform)) = iter.fetch_next() {
 | 
					    while let Some((transform, mut global_transform)) = iter.fetch_next() {
 | 
				
			||||||
        if !transform.is_changed() && !global_transform.is_added() {
 | 
					        if !transform.is_changed() && !global_transform.is_added() {
 | 
				
			||||||
            *global_transform = GlobalTransform::from(*transform);
 | 
					            *global_transform = GlobalTransform::from(*transform);
 | 
				
			||||||
@ -57,7 +57,7 @@ pub fn propagate_transforms(
 | 
				
			|||||||
    mut orphaned_entities: Local<Vec<Entity>>,
 | 
					    mut orphaned_entities: Local<Vec<Entity>>,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
    orphaned_entities.clear();
 | 
					    orphaned_entities.clear();
 | 
				
			||||||
    orphaned_entities.extend(orphaned.iter());
 | 
					    orphaned_entities.extend(orphaned.read());
 | 
				
			||||||
    orphaned_entities.sort_unstable();
 | 
					    orphaned_entities.sort_unstable();
 | 
				
			||||||
    root_query.par_iter_mut().for_each(
 | 
					    root_query.par_iter_mut().for_each(
 | 
				
			||||||
        |(entity, children, transform, mut global_transform)| {
 | 
					        |(entity, children, transform, mut global_transform)| {
 | 
				
			||||||
 | 
				
			|||||||
@ -281,10 +281,10 @@ pub fn ui_layout_system(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // clean up removed nodes
 | 
					    // clean up removed nodes
 | 
				
			||||||
    ui_surface.remove_entities(removed_nodes.iter());
 | 
					    ui_surface.remove_entities(removed_nodes.read());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // When a `ContentSize` component is removed from an entity, we need to remove the measure from the corresponding taffy node.
 | 
					    // When a `ContentSize` component is removed from an entity, we need to remove the measure from the corresponding taffy node.
 | 
				
			||||||
    for entity in removed_content_sizes.iter() {
 | 
					    for entity in removed_content_sizes.read() {
 | 
				
			||||||
        ui_surface.try_remove_measure(entity);
 | 
					        ui_surface.try_remove_measure(entity);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -292,7 +292,7 @@ pub fn ui_layout_system(
 | 
				
			|||||||
    ui_surface.set_window_children(primary_window_entity, root_node_query.iter());
 | 
					    ui_surface.set_window_children(primary_window_entity, root_node_query.iter());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // update and remove children
 | 
					    // update and remove children
 | 
				
			||||||
    for entity in removed_children.iter() {
 | 
					    for entity in removed_children.read() {
 | 
				
			||||||
        ui_surface.try_remove_children(entity);
 | 
					        ui_surface.try_remove_children(entity);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    for (entity, children) in &children_query {
 | 
					    for (entity, children) in &children_query {
 | 
				
			||||||
 | 
				
			|||||||
@ -110,7 +110,7 @@ pub(crate) fn despawn_windows(
 | 
				
			|||||||
    mut close_events: EventWriter<WindowClosed>,
 | 
					    mut close_events: EventWriter<WindowClosed>,
 | 
				
			||||||
    mut winit_windows: NonSendMut<WinitWindows>,
 | 
					    mut winit_windows: NonSendMut<WinitWindows>,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
    for window in closed.iter() {
 | 
					    for window in closed.read() {
 | 
				
			||||||
        info!("Closing window {:?}", window);
 | 
					        info!("Closing window {:?}", window);
 | 
				
			||||||
        // Guard to verify that the window is in fact actually gone,
 | 
					        // Guard to verify that the window is in fact actually gone,
 | 
				
			||||||
        // rather than having the component added and removed in the same frame.
 | 
					        // rather than having the component added and removed in the same frame.
 | 
				
			||||||
 | 
				
			|||||||
@ -51,9 +51,9 @@ fn remove_component(
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn react_on_removal(mut removed: RemovedComponents<MyComponent>, mut query: Query<&mut Sprite>) {
 | 
					fn react_on_removal(mut removed: RemovedComponents<MyComponent>, mut query: Query<&mut Sprite>) {
 | 
				
			||||||
    // `RemovedComponents<T>::iter()` returns an iterator with the `Entity`s that had their
 | 
					    // `RemovedComponents<T>::read()` returns an iterator with the `Entity`s that had their
 | 
				
			||||||
    // `Component` `T` (in this case `MyComponent`) removed at some point earlier during the frame.
 | 
					    // `Component` `T` (in this case `MyComponent`) removed at some point earlier during the frame.
 | 
				
			||||||
    for entity in &mut removed {
 | 
					    for entity in removed.read() {
 | 
				
			||||||
        if let Ok(mut sprite) = query.get_mut(entity) {
 | 
					        if let Ok(mut sprite) = query.get_mut(entity) {
 | 
				
			||||||
            sprite.color.set_r(0.0);
 | 
					            sprite.color.set_r(0.0);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user