rust/hwphysics/src/physics.rs
changeset 15274 42b710b0f883
parent 15270 7446258fab98
child 15275 66c987015f2d
--- a/rust/hwphysics/src/physics.rs	Thu Jul 25 21:59:20 2019 +0300
+++ b/rust/hwphysics/src/physics.rs	Thu Jul 25 22:31:24 2019 +0300
@@ -35,12 +35,20 @@
         self.gear_ids.len()
     }
 
-    fn push(&mut self, id: GearId, physics: PhysicsData) {
-        self.gear_ids.push(id);
+    fn push(&mut self, gear_id: GearId, physics: PhysicsData) {
+        self.gear_ids.push(gear_id);
         self.positions.push(physics.position);
         self.velocities.push(physics.velocity);
     }
 
+    fn remove(&mut self, gear_id: GearId) {
+        if let Some(index) = self.gear_ids.iter().position(|id| *id == gear_id) {
+            self.gear_ids.swap_remove(index);
+            self.positions.swap_remove(index);
+            self.velocities.swap_remove(index);
+        }
+    }
+
     fn iter_pos_update(&mut self) -> impl Iterator<Item = (GearId, (&mut FPPoint, &FPPoint))> {
         self.gear_ids
             .iter()
@@ -66,6 +74,13 @@
         self.gear_ids.push(gear_id);
         self.positions.push(physics.position);
     }
+
+    fn remove(&mut self, gear_id: GearId) {
+        if let Some(index) = self.gear_ids.iter().position(|id| *id == gear_id) {
+            self.gear_ids.swap_remove(index);
+            self.positions.swap_remove(index);
+        }
+    }
 }
 
 pub struct PhysicsProcessor {
@@ -149,4 +164,9 @@
             self.dynamic_physics.push(gear_id, gear_data);
         }
     }
+
+    fn remove(&mut self, gear_id: GearId) {
+        self.static_physics.remove(gear_id);
+        self.dynamic_physics.remove(gear_id)
+    }
 }