From 6e6bafe719b3914a708e77392f45efe6c6fa357f Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Tue, 29 Apr 2025 17:57:31 -0700 Subject: [PATCH] use .entry() match in generate_models --- engine/physics/src/physics.rs | 49 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/engine/physics/src/physics.rs b/engine/physics/src/physics.rs index 2c8cda9..e9a9cb3 100644 --- a/engine/physics/src/physics.rs +++ b/engine/physics/src/physics.rs @@ -1006,31 +1006,30 @@ impl PhysicsData{ let mut used_meshes=Vec::new(); let mut physics_mesh_id_from_model_mesh_id=HashMap::<MeshId,PhysicsMeshId>::new(); for (model_id,model) in map.models.iter().enumerate(){ - //TODO: use .entry().or_insert_with(||{ - let attr_id=if let Some(&attr_id)=physics_attr_id_from_model_attr_id.get(&model.attributes){ - attr_id - }else{ - //check if it's real - match map.attributes.get(model.attributes.get() as usize).and_then(|m_attr|{ - PhysicsCollisionAttributes::try_from(m_attr).map_or(None,|p_attr|{ - let attr_id=match p_attr{ - PhysicsCollisionAttributes::Contact(attr)=>{ - let attr_id=ContactAttributesId::new(used_contact_attributes.len() as u32); - used_contact_attributes.push(attr); - PhysicsAttributesId::Contact(attr_id) - }, - PhysicsCollisionAttributes::Intersect(attr)=>{ - let attr_id=IntersectAttributesId::new(used_intersect_attributes.len() as u32); - used_intersect_attributes.push(attr); - PhysicsAttributesId::Intersect(attr_id) - }, - }; - physics_attr_id_from_model_attr_id.insert(model.attributes,attr_id); - Some(attr_id) - }) - }){ - Some(attr_id)=>attr_id, - None=>continue, + let attr_id=match physics_attr_id_from_model_attr_id.entry(model.attributes){ + std::collections::hash_map::Entry::Occupied(entry)=>*entry.get(), + std::collections::hash_map::Entry::Vacant(entry)=>{ + //check if it's real + match map.attributes.get(model.attributes.get() as usize).and_then(|m_attr|{ + PhysicsCollisionAttributes::try_from(m_attr).map_or(None,|p_attr|{ + let attr_id=match p_attr{ + PhysicsCollisionAttributes::Contact(attr)=>{ + let attr_id=ContactAttributesId::new(used_contact_attributes.len() as u32); + used_contact_attributes.push(attr); + PhysicsAttributesId::Contact(attr_id) + }, + PhysicsCollisionAttributes::Intersect(attr)=>{ + let attr_id=IntersectAttributesId::new(used_intersect_attributes.len() as u32); + used_intersect_attributes.push(attr); + PhysicsAttributesId::Intersect(attr_id) + }, + }; + Some(*entry.insert(attr_id)) + }) + }){ + Some(attr_id)=>attr_id, + None=>continue, + } } }; let mesh_id=if let Some(&mesh_id)=physics_mesh_id_from_model_mesh_id.get(&model.mesh){