aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Ernerfeldt <emil.ernerfeldt@gmail.com>2021-03-05 12:04:27 +0100
committerEmil Ernerfeldt <emil.ernerfeldt@gmail.com>2021-03-05 12:04:27 +0100
commit0909077094774a58f2705120cec7aa0003178a03 (patch)
treed3a8374708a6ad91449bf9ee295e079de811f89d
parent64af4252273820b0fc3e264fed4747fecff4e368 (diff)
downloadrapier-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.rs16
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();