bevy_rapier2d/geometry/shape_views/
capsule.rs1use super::SegmentView;
2use crate::math::{Real, Rot, Vect};
3use rapier::parry::shape::Capsule;
4
5#[derive(Copy, Clone)]
7pub struct CapsuleView<'a> {
8 pub raw: &'a Capsule,
10}
11
12macro_rules! impl_ref_methods(
13 ($View: ident) => {
14 impl<'a> $View<'a> {
15 pub fn segment(&self) -> SegmentView<'_> {
17 SegmentView {
18 raw: &self.raw.segment,
19 }
20 }
21
22 pub fn radius(&self) -> Real {
24 self.raw.radius
25 }
26
27 pub fn height(&self) -> Real {
29 self.raw.height()
30 }
31
32 pub fn half_height(&self) -> Real {
34 self.raw.half_height()
35 }
36
37 pub fn center(&self) -> Vect {
39 self.raw.center().into()
40 }
41
42 pub fn canonical_transform(&self) -> (Vect, Rot) {
45 let pose = self.raw.canonical_transform();
46 #[cfg(feature = "dim2")]
47 return (pose.translation, pose.rotation.angle());
48 #[cfg(feature = "dim3")]
49 return (pose.translation, pose.rotation);
50 }
51
52 #[cfg(feature = "dim2")]
54 pub fn rotation_wrt_y(&self) -> Rot {
55 self.raw.rotation_wrt_y().angle()
56 }
57
58 #[cfg(feature = "dim3")]
60 pub fn rotation_wrt_y(&self) -> Rot {
61 self.raw.rotation_wrt_y()
62 }
63
64 pub fn transform_wrt_y(&self) -> (Vect, Rot) {
66 let pose = self.raw.transform_wrt_y();
67 #[cfg(feature = "dim2")]
68 return (pose.translation, pose.rotation.angle());
69 #[cfg(feature = "dim3")]
70 return (pose.translation, pose.rotation);
71 }
72 }
73 }
74);
75
76impl_ref_methods!(CapsuleView);
77
78pub struct CapsuleViewMut<'a> {
80 pub raw: &'a mut Capsule,
82}
83
84impl_ref_methods!(CapsuleViewMut);
85
86impl CapsuleViewMut<'_> {
87 pub fn set_segment(&mut self, start: Vect, end: Vect) {
89 self.raw.segment.a = start;
90 self.raw.segment.b = end;
91 }
92
93 pub fn set_radius(&mut self, radius: Real) {
95 self.raw.radius = radius;
96 }
97}