rapier2d/dynamics/joint/impulse_joint/
impulse_joint.rs1use crate::dynamics::{GenericJoint, ImpulseJointHandle, RigidBodyHandle};
2use crate::math::SpatialVector;
3
4#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
5#[derive(Clone, Debug, PartialEq)]
6pub struct ImpulseJoint {
8 pub(crate) body1: RigidBodyHandle,
15 pub(crate) body2: RigidBodyHandle,
18
19 pub data: GenericJoint,
21
22 pub impulses: SpatialVector,
24
25 pub(crate) handle: ImpulseJointHandle,
27
28 #[cfg_attr(
32 feature = "serde-serialize",
33 serde(skip, default = "default_solver_body_ids")
34 )]
35 pub(crate) solver_body_ids: [u32; 2],
36 #[cfg_attr(feature = "serde-serialize", serde(default = "default_solver_color"))]
38 pub(crate) solver_color: u8,
39}
40
41#[cfg(feature = "serde-serialize")]
42fn default_solver_color() -> u8 {
43 crate::geometry::contact_pair::SOLVER_COLOR_UNCOLORED
44}
45
46#[cfg(feature = "serde-serialize")]
47fn default_solver_body_ids() -> [u32; 2] {
48 [u32::MAX; 2]
49}
50
51impl ImpulseJoint {
52 #[inline]
54 pub fn body1(&self) -> RigidBodyHandle {
55 self.body1
56 }
57
58 #[inline]
60 pub fn body2(&self) -> RigidBodyHandle {
61 self.body2
62 }
63}