avian3d/dynamics/rigid_body/mass_properties/components/
collider.rs1use super::super::MassProperties;
2use crate::prelude::*;
3use bevy::prelude::*;
4use derive_more::derive::From;
5
6#[cfg_attr(feature = "2d", doc = "use avian2d::prelude::*;")]
15#[cfg_attr(feature = "3d", doc = "use avian3d::prelude::*;")]
16#[cfg_attr(feature = "2d", doc = " Collider::circle(0.5),")]
23#[cfg_attr(feature = "3d", doc = " Collider::sphere(0.5),")]
24#[derive(Reflect, Clone, Copy, Component, Debug, Deref, DerefMut, PartialEq, PartialOrd, From)]
29#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
30#[cfg_attr(feature = "serialize", reflect(Serialize, Deserialize))]
31#[reflect(Debug, Component, PartialEq)]
32pub struct ColliderDensity(pub f32);
33
34impl Default for ColliderDensity {
35 fn default() -> Self {
36 Self(1.0)
37 }
38}
39
40impl ColliderDensity {
41 pub const ZERO: Self = Self(0.0);
43}
44
45#[cfg_attr(feature = "2d", doc = "use avian2d::prelude::*;")]
56#[cfg_attr(feature = "3d", doc = "use avian3d::prelude::*;")]
57#[cfg_attr(
61 feature = "2d",
62 doc = " commands.spawn((RigidBody::Dynamic, Collider::circle(0.5)));"
63)]
64#[cfg_attr(
65 feature = "3d",
66 doc = " commands.spawn((RigidBody::Dynamic, Collider::sphere(0.5)));"
67)]
68#[derive(Reflect, Clone, Copy, Component, Debug, Default, Deref, PartialEq, From)]
77#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
78#[cfg_attr(feature = "serialize", reflect(Serialize, Deserialize))]
79#[reflect(Debug, Component, PartialEq)]
80pub struct ColliderMassProperties(MassProperties);
81
82impl ColliderMassProperties {
83 pub const ZERO: Self = Self(MassProperties::ZERO);
85
86 #[inline]
91 pub fn from_shape<T: ComputeMassProperties>(shape: &T, density: f32) -> Self {
92 Self(shape.mass_properties(density))
93 }
94}