diff options
| author | Emil Ernerfeldt <emil.ernerfeldt@gmail.com> | 2021-03-05 12:04:27 +0100 |
|---|---|---|
| committer | Emil Ernerfeldt <emil.ernerfeldt@gmail.com> | 2021-03-05 12:04:27 +0100 |
| commit | 0909077094774a58f2705120cec7aa0003178a03 (patch) | |
| tree | d3a8374708a6ad91449bf9ee295e079de811f89d | |
| parent | 64af4252273820b0fc3e264fed4747fecff4e368 (diff) | |
| download | rapier-0909077094774a58f2705120cec7aa0003178a03.tar.gz rapier-0909077094774a58f2705120cec7aa0003178a03.tar.bz2 rapier-0909077094774a58f2705120cec7aa0003178a03.zip | |
Use Box<Option<MassProperties>> instead to save on memory
| -rw-r--r-- | src/geometry/collider.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index 68caf42..2691a1a 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -49,7 +49,8 @@ impl ColliderFlags { pub struct Collider { shape: SharedShape, density: Real, - mass_properties: MassProperties, + /// If None, use [`Self::density`] and [`SharedShape::mass_properties`]. + mass_properties: Option<Box<MassProperties>>, pub(crate) flags: ColliderFlags, pub(crate) solver_flags: SolverFlags, pub(crate) parent: RigidBodyHandle, @@ -135,9 +136,12 @@ impl Collider { // aabb1.merged(&aabb2) // } - /// Read the local-space mass properties of this collider. - pub fn mass_properties(&self) -> &MassProperties { - &self.mass_properties + /// Compute the local-space mass properties of this collider. + pub fn mass_properties(&self) -> MassProperties { + match &self.mass_properties { + Some(mass_properties) => **mass_properties, + None => self.shape.mass_properties(self.density), + } } } @@ -559,7 +563,7 @@ impl ColliderBuilder { pub fn build(&self) -> Collider { let (density, mass_properties); if let Some(mp) = self.mass_properties { - mass_properties = mp; + mass_properties = Some(Box::new(mp)); let volume = volume(&self.shape); density = if volume == 0.0 || mp.inv_mass == 0.0 { @@ -569,7 +573,7 @@ impl ColliderBuilder { }; } else { density = self.get_density(); - mass_properties = self.shape.mass_properties(density); + mass_properties = None; } let mut flags = ColliderFlags::empty(); |
