Use Box<Option<MassProperties>> instead to save on memory
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user