Use Box<Option<MassProperties>> instead to save on memory
This commit is contained in:
@@ -49,7 +49,8 @@ impl ColliderFlags {
|
|||||||
pub struct Collider {
|
pub struct Collider {
|
||||||
shape: SharedShape,
|
shape: SharedShape,
|
||||||
density: Real,
|
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) flags: ColliderFlags,
|
||||||
pub(crate) solver_flags: SolverFlags,
|
pub(crate) solver_flags: SolverFlags,
|
||||||
pub(crate) parent: RigidBodyHandle,
|
pub(crate) parent: RigidBodyHandle,
|
||||||
@@ -135,9 +136,12 @@ impl Collider {
|
|||||||
// aabb1.merged(&aabb2)
|
// aabb1.merged(&aabb2)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/// Read the local-space mass properties of this collider.
|
/// Compute the local-space mass properties of this collider.
|
||||||
pub fn mass_properties(&self) -> &MassProperties {
|
pub fn mass_properties(&self) -> MassProperties {
|
||||||
&self.mass_properties
|
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 {
|
pub fn build(&self) -> Collider {
|
||||||
let (density, mass_properties);
|
let (density, mass_properties);
|
||||||
if let Some(mp) = self.mass_properties {
|
if let Some(mp) = self.mass_properties {
|
||||||
mass_properties = mp;
|
mass_properties = Some(Box::new(mp));
|
||||||
|
|
||||||
let volume = volume(&self.shape);
|
let volume = volume(&self.shape);
|
||||||
density = if volume == 0.0 || mp.inv_mass == 0.0 {
|
density = if volume == 0.0 || mp.inv_mass == 0.0 {
|
||||||
@@ -569,7 +573,7 @@ impl ColliderBuilder {
|
|||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
density = self.get_density();
|
density = self.get_density();
|
||||||
mass_properties = self.shape.mass_properties(density);
|
mass_properties = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut flags = ColliderFlags::empty();
|
let mut flags = ColliderFlags::empty();
|
||||||
|
|||||||
Reference in New Issue
Block a user