Use Box<Option<MassProperties>> instead to save on memory

This commit is contained in:
Emil Ernerfeldt
2021-03-05 12:04:27 +01:00
parent 64af425227
commit 0909077094

View File

@@ -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();