Change despawn_descendants to return &mut Self (#8928)

# Objective

- Change despawn descendants to return self (#8883).

## Solution

- Change function signature `despawn_descendants` under trait
`DespawnRecursiveExt`.
- Add single extra test `spawn_children_after_despawn_descendants` (May
be unnecessary)

---------

Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
This commit is contained in:
Anby 2023-06-23 11:38:13 +09:30 committed by GitHub
parent 70f91b2b9e
commit 29f7293e30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -86,7 +86,7 @@ pub trait DespawnRecursiveExt {
fn despawn_recursive(self);
/// Despawns all descendants of the given entity.
fn despawn_descendants(&mut self);
fn despawn_descendants(&mut self) -> &mut Self;
}
impl<'w, 's, 'a> DespawnRecursiveExt for EntityCommands<'w, 's, 'a> {
@ -96,9 +96,10 @@ impl<'w, 's, 'a> DespawnRecursiveExt for EntityCommands<'w, 's, 'a> {
self.commands().add(DespawnRecursive { entity });
}
fn despawn_descendants(&mut self) {
fn despawn_descendants(&mut self) -> &mut Self {
let entity = self.id();
self.commands().add(DespawnChildrenRecursive { entity });
self
}
}
@ -117,7 +118,7 @@ impl<'w> DespawnRecursiveExt for EntityMut<'w> {
despawn_with_children_recursive(self.into_world_mut(), entity);
}
fn despawn_descendants(&mut self) {
fn despawn_descendants(&mut self) -> &mut Self {
let entity = self.id();
#[cfg(feature = "trace")]
@ -130,6 +131,7 @@ impl<'w> DespawnRecursiveExt for EntityMut<'w> {
self.world_scope(|world| {
despawn_children_recursive(world, entity);
});
self
}
}
@ -246,4 +248,32 @@ mod tests {
// The child should be despawned.
assert!(world.get_entity(child).is_none());
}
#[test]
fn spawn_children_after_despawn_descendants() {
let mut world = World::default();
let mut queue = CommandQueue::default();
let mut commands = Commands::new(&mut queue, &world);
let parent = commands.spawn_empty().id();
let child = commands.spawn_empty().id();
commands
.entity(parent)
.add_child(child)
.despawn_descendants()
.with_children(|parent| {
parent.spawn_empty();
parent.spawn_empty();
});
queue.apply(&mut world);
// The parent's Children component should still have two children.
let children = world.entity(parent).get::<Children>();
assert!(children.is_some());
assert!(children.unwrap().len() == 2_usize);
// The original child should be despawned.
assert!(world.get_entity(child).is_none());
}
}