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){