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(type(copy))]
11 pub(crate) linear_damping: f64,
12 #[get(type(copy))]
14 pub(crate) angular_damping: f64,
15}
16
17#[derive(Clone, Data, Debug, New, PartialEq)]
19pub struct RigidBody2D {
20 #[get(type(copy))]
22 pub(crate) id: u64,
23 #[get(type(copy))]
25 #[get_mut(pub(crate))]
26 pub(crate) position: Vector2D,
27 #[get(type(copy))]
29 #[get_mut(pub(crate))]
30 #[new(skip)]
31 pub(crate) velocity: Vector2D,
32 #[get(pub(crate), type(copy))]
34 #[get_mut(pub(crate))]
35 #[set(pub(crate))]
36 #[new(skip)]
37 pub(crate) force_accumulator: Vector2D,
38 #[get(type(copy))]
40 #[get_mut(pub(crate))]
41 #[new(skip)]
42 pub(crate) rotation: f64,
43 #[get(type(copy))]
45 #[get_mut(pub(crate))]
46 #[new(skip)]
47 pub(crate) angular_velocity: f64,
48 #[get(type(copy))]
50 #[get_mut(pub(crate))]
51 pub(crate) mass: f64,
52 #[get(pub(crate), type(copy))]
54 #[get_mut(pub(crate))]
55 #[set(pub(crate))]
56 pub(crate) inverse_mass: f64,
57 #[get(type(copy))]
59 pub(crate) restitution: f64,
60 #[get(type(copy))]
62 pub(crate) friction: f64,
63 #[get(type(copy))]
65 pub(crate) body_type: BodyType,
66 #[get(type(copy))]
68 #[new(skip)]
69 pub(crate) collider: Option<BodyCollider>,
70}
71
72#[derive(Clone, Data, Debug, New, PartialEq)]
74pub struct PhysicsWorld2D {
75 #[get(pub(crate))]
77 #[get_mut(pub(crate))]
78 #[set(pub(crate))]
79 #[new(skip)]
80 pub(crate) bodies: Vec<RigidBody2D>,
81 #[get(type(copy))]
83 pub(crate) config: PhysicsConfig,
84 #[get_mut(pub(crate))]
87 #[set(pub(crate))]
88 #[new(skip)]
89 pub(crate) grid: SpatialHashGrid2D,
90 #[get_mut(pub(crate))]
92 #[new(skip)]
93 pub(crate) query_buffer: Vec<usize>,
94 #[get_mut(pub(crate))]
96 #[new(skip)]
97 pub(crate) query_seen: HashSet<usize>,
98 #[get_mut(pub(crate))]
101 #[new(skip)]
102 pub(crate) pair_buffer: Vec<(usize, usize)>,
103}
104
105#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
107pub struct PhysicsConfig3D {
108 #[get(type(copy))]
110 pub(crate) gravity: Vector3D,
111 #[get(type(copy))]
113 pub(crate) linear_damping: f64,
114 #[get(type(copy))]
116 pub(crate) angular_damping: f64,
117}
118
119#[derive(Clone, Data, Debug, New, PartialEq)]
121pub struct RigidBody3D {
122 #[get(type(copy))]
124 pub(crate) id: u64,
125 #[get(type(copy))]
127 #[get_mut(pub(crate))]
128 pub(crate) position: Vector3D,
129 #[get(type(copy))]
131 #[get_mut(pub(crate))]
132 #[new(skip)]
133 pub(crate) velocity: Vector3D,
134 #[get(pub(crate), type(copy))]
136 #[get_mut(pub(crate))]
137 #[set(pub(crate))]
138 #[new(skip)]
139 pub(crate) force_accumulator: Vector3D,
140 #[get(type(copy))]
142 #[get_mut(pub(crate))]
143 #[new(skip)]
144 pub(crate) rotation: Quaternion,
145 #[get(type(copy))]
147 #[get_mut(pub(crate))]
148 #[new(skip)]
149 pub(crate) angular_velocity: Vector3D,
150 #[get(pub(crate), type(copy))]
152 #[get_mut(pub(crate))]
153 #[set(pub(crate))]
154 #[new(skip)]
155 pub(crate) torque_accumulator: Vector3D,
156 #[get(type(copy))]
158 #[get_mut(pub(crate))]
159 pub(crate) mass: f64,
160 #[get(pub(crate), type(copy))]
162 #[get_mut(pub(crate))]
163 #[set(pub(crate))]
164 pub(crate) inverse_mass: f64,
165 #[get(type(copy))]
167 pub(crate) restitution: f64,
168 #[get(type(copy))]
170 pub(crate) friction: f64,
171 #[get(type(copy))]
173 pub(crate) body_type: BodyType,
174 #[get(type(copy))]
176 #[new(skip)]
177 pub(crate) collider: Option<BodyCollider3D>,
178}
179
180#[derive(Clone, Data, Debug, New, PartialEq)]
182pub struct PhysicsWorld3D {
183 #[get(pub(crate))]
185 #[get_mut(pub(crate))]
186 #[set(pub(crate))]
187 #[new(skip)]
188 pub(crate) bodies: Vec<RigidBody3D>,
189 #[get(type(copy))]
191 pub(crate) config: PhysicsConfig3D,
192 #[get_mut(pub(crate))]
195 #[set(pub(crate))]
196 #[new(skip)]
197 pub(crate) grid: SpatialHashGrid3D,
198 #[get_mut(pub(crate))]
200 #[new(skip)]
201 pub(crate) query_buffer: Vec<usize>,
202 #[get_mut(pub(crate))]
204 #[new(skip)]
205 pub(crate) query_seen: HashSet<usize>,
206 #[get_mut(pub(crate))]
209 #[new(skip)]
210 pub(crate) pair_buffer: Vec<(usize, usize)>,
211}