1use core::ffi::c_float;
2
3use sys::ffi::CollisionPoint;
4use sys::ffi::CollisionVector;
5use sys::ffi::PDRect;
6use sys::ffi::SpriteCollisionInfo;
7use sys::ffi::SpriteCollisionResponseType;
8use sys::ffi::SpriteQueryInfo;
9
10use crate::SpriteRef;
11
12
13pub trait SpriteQueryInfoExt {
14 fn sprite(&self) -> SpriteRef;
16
17 fn ti1(&self) -> c_float;
22
23 fn ti2(&self) -> c_float;
28
29 fn entry_point(&self) -> &CollisionPoint;
31 fn entry_point_mut(&mut self) -> &mut CollisionPoint;
32
33 fn exit_point(&self) -> &CollisionPoint;
35 fn exit_point_mut(&mut self) -> &mut CollisionPoint;
36}
37
38impl SpriteQueryInfoExt for SpriteQueryInfo {
39 fn sprite(&self) -> SpriteRef { self.sprite.into() }
40
41 fn ti1(&self) -> c_float { self.ti1 }
42
43 fn ti2(&self) -> c_float { self.ti2 }
44
45 fn entry_point(&self) -> &CollisionPoint { &self.entryPoint }
46 fn entry_point_mut(&mut self) -> &mut CollisionPoint { &mut self.entryPoint }
47
48 fn exit_point(&self) -> &CollisionPoint { &self.exitPoint }
49 fn exit_point_mut(&mut self) -> &mut CollisionPoint { &mut self.exitPoint }
50}
51
52
53trait SpriteCollisionInfoExt {
54 fn sprite(&self) -> SpriteRef;
56
57 fn other(&self) -> SpriteRef;
59
60 fn response_type(&self) -> SpriteCollisionResponseType;
62
63 fn overlaps(&self) -> bool;
67
68 fn ti(&self) -> c_float;
70
71 fn diff(&self) -> &CollisionPoint;
73
74 fn normal(&self) -> &CollisionVector;
79
80 fn touch(&self) -> &CollisionPoint;
82
83 fn sprite_rect(&self) -> &PDRect;
85
86 fn other_rect(&self) -> &PDRect;
88}
89
90impl SpriteCollisionInfoExt for SpriteCollisionInfo {
91 fn sprite(&self) -> SpriteRef { self.sprite.into() }
92 fn other(&self) -> SpriteRef { self.other.into() }
93 fn response_type(&self) -> SpriteCollisionResponseType { self.responseType }
94 fn overlaps(&self) -> bool { self.overlaps != 0 }
95 fn ti(&self) -> c_float { self.ti }
96 fn diff(&self) -> &CollisionPoint { &self.move_ }
97 fn normal(&self) -> &CollisionVector { &self.normal }
98 fn touch(&self) -> &CollisionPoint { &self.touch }
99 fn sprite_rect(&self) -> &PDRect { &self.spriteRect }
100 fn other_rect(&self) -> &PDRect { &self.otherRect }
101}
102
103
104pub trait SpriteCollisionResponseTypeExt {
105 #![allow(non_upper_case_globals)]
106 const Slide: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeSlide;
107 const Freeze: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeFreeze;
108 const Overlap: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeOverlap;
109 const Bounce: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeBounce;
110}
111
112impl SpriteCollisionResponseTypeExt for SpriteCollisionResponseType {}