diff --git a/src/plugin/systems.rs b/src/plugin/systems.rs index 2751fcabf..94a8c830b 100644 --- a/src/plugin/systems.rs +++ b/src/plugin/systems.rs @@ -1090,11 +1090,12 @@ pub fn sync_removals( mut removed_rigid_body_disabled: RemovedComponents, mut removed_colliders_disabled: RemovedComponents, ) { + let context = &mut *context; + /* * Rigid-bodies removal detection. */ - let context = &mut *context; - for entity in removed_bodies.iter() { + for entity in removed_bodies.iter().chain(orphan_bodies.iter()) { if let Some(handle) = context.entity2body.remove(&entity) { let _ = context.last_body_transform_set.remove(&handle); context.bodies.remove( @@ -1106,78 +1107,54 @@ pub fn sync_removals( false, ); } - } - - let context = &mut *context; - for entity in orphan_bodies.iter() { - if let Some(handle) = context.entity2body.remove(&entity) { - let _ = context.last_body_transform_set.remove(&handle); - context.bodies.remove( - handle, - &mut context.islands, - &mut context.colliders, - &mut context.impulse_joints, - &mut context.multibody_joints, - false, - ); + if let Some(mut entity) = commands.get_entity(entity) { + entity.remove::(); } - commands.entity(entity).remove::(); } /* * Collider removal detection. */ - for entity in removed_colliders.iter() { + for entity in removed_colliders.iter().chain(orphan_colliders.iter()) { if let Some(handle) = context.entity2collider.remove(&entity) { context .colliders .remove(handle, &mut context.islands, &mut context.bodies, true); context.deleted_colliders.insert(handle, entity); } - } - - for entity in orphan_colliders.iter() { - if let Some(handle) = context.entity2collider.remove(&entity) { - context - .colliders - .remove(handle, &mut context.islands, &mut context.bodies, true); - context.deleted_colliders.insert(handle, entity); + if let Some(mut entity) = commands.get_entity(entity) { + entity.remove::(); } - commands.entity(entity).remove::(); } /* * Impulse joint removal detection. */ - for entity in removed_impulse_joints.iter() { + for entity in removed_impulse_joints + .iter() + .chain(orphan_impulse_joints.iter()) + { if let Some(handle) = context.entity2impulse_joint.remove(&entity) { context.impulse_joints.remove(handle, true); } - } - - for entity in orphan_impulse_joints.iter() { - if let Some(handle) = context.entity2impulse_joint.remove(&entity) { - context.impulse_joints.remove(handle, true); + if let Some(mut entity) = commands.get_entity(entity) { + entity.remove::(); } - commands.entity(entity).remove::(); } /* * Multibody joint removal detection. */ - for entity in removed_multibody_joints.iter() { + for entity in removed_multibody_joints + .iter() + .chain(orphan_multibody_joints.iter()) + { if let Some(handle) = context.entity2multibody_joint.remove(&entity) { context.multibody_joints.remove(handle, true); } - } - - for entity in orphan_multibody_joints.iter() { - if let Some(handle) = context.entity2multibody_joint.remove(&entity) { - context.multibody_joints.remove(handle, true); + if let Some(mut entity) = commands.get_entity(entity) { + entity.remove::(); } - commands - .entity(entity) - .remove::(); } /*