euv_engine/physics/
struct.rs1use super::*;
2
3#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
5pub struct PhysicsConfig {
6 #[get(type(copy))]
8 pub(crate) gravity: Vector2D,
9 #[get(pub(crate), type(copy))]
11 #[get_mut(pub(crate))]
12 #[set(pub(crate))]
13 pub(crate) linear_damping: f64,
14 #[get(pub(crate), type(copy))]
16 #[get_mut(pub(crate))]
17 #[set(pub(crate))]
18 pub(crate) angular_damping: f64,
19}
20
21#[derive(Clone, Data, Debug, New, PartialEq)]
23pub struct RigidBody2D {
24 #[get(type(copy))]
26 #[get_mut(pub(crate))]
27 pub(crate) id: u64,
28 #[get(type(copy))]
30 #[get_mut(pub(crate))]
31 pub(crate) position: Vector2D,
32 #[get(type(copy))]
34 #[get_mut(pub(crate))]
35 #[new(skip)]
36 pub(crate) velocity: Vector2D,
37 #[get(type(copy))]
39 #[get_mut(pub(crate))]
40 #[set(pub(crate))]
41 #[new(skip)]
42 pub(crate) force_accumulator: Vector2D,
43 #[get(type(copy))]
45 #[get_mut(pub(crate))]
46 #[new(skip)]
47 #[get(pub(crate))]
48 #[set(pub(crate))]
49 pub(crate) rotation: f64,
50 #[get(type(copy))]
52 #[get_mut(pub(crate))]
53 #[new(skip)]
54 #[set(pub(crate))]
55 pub(crate) angular_velocity: f64,
56 #[get(type(copy))]
58 #[get_mut(pub(crate))]
59 #[set(pub(crate))]
60 pub(crate) mass: f64,
61 #[get(type(copy))]
63 #[get_mut(pub(crate))]
64 #[set(pub(crate))]
65 pub(crate) inverse_mass: f64,
66 #[get(pub(crate), type(copy))]
68 #[get_mut(pub(crate))]
69 #[set(pub(crate))]
70 pub(crate) restitution: f64,
71 #[get(pub(crate), type(copy))]
73 #[get_mut(pub(crate))]
74 pub(crate) friction: f64,
75 #[get(type(copy))]
77 pub(crate) body_type: BodyType,
78 #[get(type(copy))]
80 #[new(skip)]
81 #[get(pub(crate))]
82 #[get_mut(pub(crate))]
83 #[set(pub(crate))]
84 pub(crate) collider: Option<BodyCollider>,
85}
86
87#[derive(Clone, Data, Debug, New, PartialEq)]
89pub struct PhysicsWorld2D {
90 #[get_mut(pub(crate))]
92 #[set(pub(crate))]
93 #[new(skip)]
94 pub(crate) bodies: Vec<RigidBody2D>,
95 #[get(type(copy))]
97 #[get_mut(pub(crate))]
98 #[set(pub(crate))]
99 pub(crate) config: PhysicsConfig,
100 #[get_mut(pub(crate))]
103 #[set(pub(crate))]
104 #[new(skip)]
105 pub(crate) grid: SpatialHashGrid2D,
106 #[get_mut(pub(crate))]
108 #[new(skip)]
109 #[get(pub(crate))]
110 #[set(pub(crate))]
111 pub(crate) query_buffer: Vec<usize>,
112 #[get_mut(pub(crate))]
114 #[new(skip)]
115 #[get(pub(crate))]
116 #[set(pub(crate))]
117 pub(crate) query_seen: HashSet<usize>,
118 #[get_mut(pub(crate))]
121 #[set(pub(crate))]
122 #[new(skip)]
123 #[get(pub(crate))]
124 pub(crate) pair_buffer: Vec<(usize, usize)>,
125}
126
127#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
129pub struct PhysicsConfig3D {
130 #[get(pub(crate), type(copy))]
132 #[get_mut(pub(crate))]
133 #[set(pub(crate))]
134 pub(crate) gravity: Vector3D,
135 #[get(pub(crate), type(copy))]
137 #[get_mut(pub(crate))]
138 #[set(pub(crate))]
139 pub(crate) linear_damping: f64,
140 #[get(pub(crate), type(copy))]
142 #[get_mut(pub(crate))]
143 #[set(pub(crate))]
144 pub(crate) angular_damping: f64,
145}
146
147#[derive(Clone, Data, Debug, New, PartialEq)]
149pub struct RigidBody3D {
150 #[get(type(copy))]
152 #[get_mut(pub(crate))]
153 pub(crate) id: u64,
154 #[get(type(copy))]
156 #[get_mut(pub(crate))]
157 #[set(pub(crate))]
158 pub(crate) position: Vector3D,
159 #[get(type(copy))]
161 #[get_mut(pub(crate))]
162 #[new(skip)]
163 pub(crate) velocity: Vector3D,
164 #[get(type(copy))]
166 #[get_mut(pub(crate))]
167 #[set(pub(crate))]
168 #[new(skip)]
169 pub(crate) force_accumulator: Vector3D,
170 #[get(type(copy))]
172 #[get_mut(pub(crate))]
173 #[new(skip)]
174 #[get(pub(crate))]
175 #[set(pub(crate))]
176 pub(crate) rotation: Quaternion,
177 #[get(type(copy))]
179 #[get_mut(pub(crate))]
180 #[new(skip)]
181 #[set(pub(crate))]
182 pub(crate) angular_velocity: Vector3D,
183 #[get(type(copy))]
185 #[get_mut(pub(crate))]
186 #[set(pub(crate))]
187 #[new(skip)]
188 pub(crate) torque_accumulator: Vector3D,
189 #[get(type(copy))]
191 #[get_mut(pub(crate))]
192 #[set(pub(crate))]
193 pub(crate) mass: f64,
194 #[get(type(copy))]
196 #[get_mut(pub(crate))]
197 #[set(pub(crate))]
198 pub(crate) inverse_mass: f64,
199 #[get(type(copy))]
203 #[get_mut(pub(crate))]
204 #[set(pub(crate))]
205 #[new(skip)]
206 pub(crate) inverse_inertia: f64,
207 #[get(pub(crate), type(copy))]
209 #[get_mut(pub(crate))]
210 #[set(pub(crate))]
211 pub(crate) restitution: f64,
212 #[get(pub(crate), type(copy))]
214 #[get_mut(pub(crate))]
215 pub(crate) friction: f64,
216 #[get(type(copy))]
218 pub(crate) body_type: BodyType,
219 #[get(type(copy))]
221 #[new(skip)]
222 #[get(pub(crate))]
223 #[get_mut(pub(crate))]
224 #[set(pub(crate))]
225 pub(crate) collider: Option<BodyCollider3D>,
226}
227
228#[derive(Clone, Data, Debug, New, PartialEq)]
230pub struct PhysicsWorld3D {
231 #[get_mut(pub(crate))]
233 #[set(pub(crate))]
234 #[new(skip)]
235 pub(crate) bodies: Vec<RigidBody3D>,
236 #[get(type(copy))]
238 #[get_mut(pub(crate))]
239 #[set(pub(crate))]
240 pub(crate) config: PhysicsConfig3D,
241 #[get_mut(pub(crate))]
244 #[set(pub(crate))]
245 #[new(skip)]
246 pub(crate) grid: SpatialHashGrid3D,
247 #[get_mut(pub(crate))]
249 #[new(skip)]
250 #[get(pub(crate))]
251 #[set(pub(crate))]
252 pub(crate) query_buffer: Vec<usize>,
253 #[get_mut(pub(crate))]
255 #[new(skip)]
256 #[get(pub(crate))]
257 #[set(pub(crate))]
258 pub(crate) query_seen: HashSet<usize>,
259 #[get_mut(pub(crate))]
262 #[set(pub(crate))]
263 #[new(skip)]
264 #[get(pub(crate))]
265 pub(crate) pair_buffer: Vec<(usize, usize)>,
266 #[get_mut(pub(crate))]
272 #[new(skip)]
273 #[get(pub(crate))]
274 #[set(pub(crate))]
275 pub(crate) bbox_buffer: Vec<(usize, AABB3D)>,
276}