euv_engine/physics/
struct.rs1use crate::*;
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}
85
86#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
88pub struct PhysicsConfig3D {
89 #[get(type(copy))]
91 pub(crate) gravity: Vector3D,
92 #[get(type(copy))]
94 pub(crate) linear_damping: f64,
95 #[get(type(copy))]
97 pub(crate) angular_damping: f64,
98}
99
100#[derive(Clone, Data, Debug, New, PartialEq)]
102pub struct RigidBody3D {
103 #[get(type(copy))]
105 pub(crate) id: u64,
106 #[get(type(copy))]
108 #[get_mut(pub(crate))]
109 pub(crate) position: Vector3D,
110 #[get(type(copy))]
112 #[get_mut(pub(crate))]
113 #[new(skip)]
114 pub(crate) velocity: Vector3D,
115 #[get(pub(crate), type(copy))]
117 #[get_mut(pub(crate))]
118 #[set(pub(crate))]
119 #[new(skip)]
120 pub(crate) force_accumulator: Vector3D,
121 #[get(type(copy))]
123 #[get_mut(pub(crate))]
124 #[new(skip)]
125 pub(crate) rotation: Quaternion,
126 #[get(type(copy))]
128 #[get_mut(pub(crate))]
129 #[new(skip)]
130 pub(crate) angular_velocity: Vector3D,
131 #[get(pub(crate), type(copy))]
133 #[get_mut(pub(crate))]
134 #[set(pub(crate))]
135 #[new(skip)]
136 pub(crate) torque_accumulator: Vector3D,
137 #[get(type(copy))]
139 #[get_mut(pub(crate))]
140 pub(crate) mass: f64,
141 #[get(pub(crate), type(copy))]
143 #[get_mut(pub(crate))]
144 #[set(pub(crate))]
145 pub(crate) inverse_mass: f64,
146 #[get(type(copy))]
148 pub(crate) restitution: f64,
149 #[get(type(copy))]
151 pub(crate) friction: f64,
152 #[get(type(copy))]
154 pub(crate) body_type: BodyType,
155 #[get(type(copy))]
157 #[new(skip)]
158 pub(crate) collider: Option<BodyCollider3D>,
159}
160
161#[derive(Clone, Data, Debug, New, PartialEq)]
163pub struct PhysicsWorld3D {
164 #[get(pub(crate))]
166 #[get_mut(pub(crate))]
167 #[set(pub(crate))]
168 #[new(skip)]
169 pub(crate) bodies: Vec<RigidBody3D>,
170 #[get(type(copy))]
172 pub(crate) config: PhysicsConfig3D,
173}