From c6a32fc96d158b4cf92bb3ea3bfb901e8372a38f Mon Sep 17 00:00:00 2001 From: Aceeri Date: Tue, 4 Jul 2023 17:22:14 -0700 Subject: [PATCH 1/2] Simplify removal logic system --- src/plugin/systems.rs | 71 +++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 47 deletions(-) diff --git a/src/plugin/systems.rs b/src/plugin/systems.rs index 2751fcabf..09e5e56f0 100644 --- a/src/plugin/systems.rs +++ b/src/plugin/systems.rs @@ -1090,26 +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() { - 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, - ); - } - } - - let context = &mut *context; - for entity in orphan_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( @@ -1121,63 +1107,54 @@ pub fn sync_removals( false, ); } - commands.entity(entity).remove::(); + commands.get_entity(entity).map(|mut 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); - } - commands.entity(entity).remove::(); + commands.get_entity(entity).map(|mut entity| { + entity.remove::(); + }); } /* * Impulse joint removal detection. */ - for entity in removed_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() { + 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); } - commands.entity(entity).remove::(); + commands.get_entity(entity).map(|mut entity| { + entity.remove::(); + }); } /* * Multibody joint removal detection. */ - for entity in removed_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() { + 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); } - commands - .entity(entity) - .remove::(); + commands.get_entity(entity).map(|mut entity| { + entity.remove::(); + }); } /* From af0b33019f2d210132e6118a3261cf02819bd60a Mon Sep 17 00:00:00 2001 From: Aceeri Date: Tue, 4 Jul 2023 17:33:42 -0700 Subject: [PATCH 2/2] Just use if let Some rather than map --- src/plugin/systems.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plugin/systems.rs b/src/plugin/systems.rs index 09e5e56f0..94a8c830b 100644 --- a/src/plugin/systems.rs +++ b/src/plugin/systems.rs @@ -1107,9 +1107,9 @@ pub fn sync_removals( false, ); } - commands.get_entity(entity).map(|mut entity| { + if let Some(mut entity) = commands.get_entity(entity) { entity.remove::(); - }); + } } /* @@ -1122,9 +1122,9 @@ pub fn sync_removals( .remove(handle, &mut context.islands, &mut context.bodies, true); context.deleted_colliders.insert(handle, entity); } - commands.get_entity(entity).map(|mut entity| { + if let Some(mut entity) = commands.get_entity(entity) { entity.remove::(); - }); + } } /* @@ -1137,9 +1137,9 @@ pub fn sync_removals( if let Some(handle) = context.entity2impulse_joint.remove(&entity) { context.impulse_joints.remove(handle, true); } - commands.get_entity(entity).map(|mut entity| { + if let Some(mut entity) = commands.get_entity(entity) { entity.remove::(); - }); + } } /* @@ -1152,9 +1152,9 @@ pub fn sync_removals( if let Some(handle) = context.entity2multibody_joint.remove(&entity) { context.multibody_joints.remove(handle, true); } - commands.get_entity(entity).map(|mut entity| { + if let Some(mut entity) = commands.get_entity(entity) { entity.remove::(); - }); + } } /*