box3d_rust/recording/write_ops/
body.rs1use crate::geometry::MassData;
8use crate::id::{BodyId, WorldId};
9use crate::math_functions::{Pos, Quat, Vec3, WorldTransform};
10use crate::types::{BodyDef, MotionLocks};
11
12use crate::recording::ops::RecOp;
13use crate::recording::session::Recording;
14
15impl Recording {
16 pub fn write_create_body(&mut self, world: WorldId, def: &BodyDef, ret_id: BodyId) {
18 self.begin_record(RecOp::CreateBody as u8);
19 self.buffer.append_world_id(world);
20 self.buffer.append_body_def(def);
21 self.buffer.append_body_id(ret_id);
22 self.end_record();
23 }
24
25 pub fn write_destroy_body(&mut self, body: BodyId) {
27 self.begin_record(RecOp::DestroyBody as u8);
28 self.buffer.append_body_id(body);
29 self.end_record();
30 }
31
32 pub fn write_body_set_transform(&mut self, body: BodyId, position: Pos, rotation: Quat) {
34 self.begin_record(RecOp::BodySetTransform as u8);
35 self.buffer.append_body_id(body);
36 self.buffer.append_pos(position);
37 self.buffer.append_quat(rotation);
38 self.end_record();
39 }
40
41 pub fn write_body_set_linear_velocity(&mut self, body: BodyId, v: Vec3) {
43 self.begin_record(RecOp::BodySetLinearVelocity as u8);
44 self.buffer.append_body_id(body);
45 self.buffer.append_vec3(v);
46 self.end_record();
47 }
48
49 pub fn write_body_set_type(&mut self, body: BodyId, type_: i32) {
51 self.begin_record(RecOp::BodySetType as u8);
52 self.buffer.append_body_id(body);
53 self.buffer.append_i32(type_);
54 self.end_record();
55 }
56
57 pub fn write_body_set_name(&mut self, body: BodyId, name: &str) {
59 self.begin_record(RecOp::BodySetName as u8);
60 self.buffer.append_body_id(body);
61 self.buffer.append_str(name);
62 self.end_record();
63 }
64
65 pub fn write_body_set_angular_velocity(&mut self, body: BodyId, w: Vec3) {
67 self.begin_record(RecOp::BodySetAngularVelocity as u8);
68 self.buffer.append_body_id(body);
69 self.buffer.append_vec3(w);
70 self.end_record();
71 }
72
73 pub fn write_body_set_target_transform(
75 &mut self,
76 body: BodyId,
77 target: WorldTransform,
78 time_step: f32,
79 wake: bool,
80 ) {
81 self.begin_record(RecOp::BodySetTargetTransform as u8);
82 self.buffer.append_body_id(body);
83 self.buffer.append_world_xf(target);
84 self.buffer.append_f32(time_step);
85 self.buffer.append_bool(wake);
86 self.end_record();
87 }
88
89 pub fn write_body_apply_force(&mut self, body: BodyId, force: Vec3, point: Pos, wake: bool) {
91 self.begin_record(RecOp::BodyApplyForce as u8);
92 self.buffer.append_body_id(body);
93 self.buffer.append_vec3(force);
94 self.buffer.append_pos(point);
95 self.buffer.append_bool(wake);
96 self.end_record();
97 }
98
99 pub fn write_body_apply_force_to_center(&mut self, body: BodyId, force: Vec3, wake: bool) {
101 self.begin_record(RecOp::BodyApplyForceToCenter as u8);
102 self.buffer.append_body_id(body);
103 self.buffer.append_vec3(force);
104 self.buffer.append_bool(wake);
105 self.end_record();
106 }
107
108 pub fn write_body_apply_torque(&mut self, body: BodyId, torque: Vec3, wake: bool) {
110 self.begin_record(RecOp::BodyApplyTorque as u8);
111 self.buffer.append_body_id(body);
112 self.buffer.append_vec3(torque);
113 self.buffer.append_bool(wake);
114 self.end_record();
115 }
116
117 pub fn write_body_apply_linear_impulse(
119 &mut self,
120 body: BodyId,
121 impulse: Vec3,
122 point: Pos,
123 wake: bool,
124 ) {
125 self.begin_record(RecOp::BodyApplyLinearImpulse as u8);
126 self.buffer.append_body_id(body);
127 self.buffer.append_vec3(impulse);
128 self.buffer.append_pos(point);
129 self.buffer.append_bool(wake);
130 self.end_record();
131 }
132
133 pub fn write_body_apply_linear_impulse_to_center(
135 &mut self,
136 body: BodyId,
137 impulse: Vec3,
138 wake: bool,
139 ) {
140 self.begin_record(RecOp::BodyApplyLinearImpulseToCenter as u8);
141 self.buffer.append_body_id(body);
142 self.buffer.append_vec3(impulse);
143 self.buffer.append_bool(wake);
144 self.end_record();
145 }
146
147 pub fn write_body_apply_angular_impulse(&mut self, body: BodyId, impulse: Vec3, wake: bool) {
149 self.begin_record(RecOp::BodyApplyAngularImpulse as u8);
150 self.buffer.append_body_id(body);
151 self.buffer.append_vec3(impulse);
152 self.buffer.append_bool(wake);
153 self.end_record();
154 }
155
156 pub fn write_body_set_mass_data(&mut self, body: BodyId, mass_data: MassData) {
158 self.begin_record(RecOp::BodySetMassData as u8);
159 self.buffer.append_body_id(body);
160 self.buffer.append_mass_data(mass_data);
161 self.end_record();
162 }
163
164 pub fn write_body_apply_mass_from_shapes(&mut self, body: BodyId) {
166 self.begin_record(RecOp::BodyApplyMassFromShapes as u8);
167 self.buffer.append_body_id(body);
168 self.end_record();
169 }
170
171 pub fn write_body_set_linear_damping(&mut self, body: BodyId, damping: f32) {
173 self.begin_record(RecOp::BodySetLinearDamping as u8);
174 self.buffer.append_body_id(body);
175 self.buffer.append_f32(damping);
176 self.end_record();
177 }
178
179 pub fn write_body_set_angular_damping(&mut self, body: BodyId, damping: f32) {
181 self.begin_record(RecOp::BodySetAngularDamping as u8);
182 self.buffer.append_body_id(body);
183 self.buffer.append_f32(damping);
184 self.end_record();
185 }
186
187 pub fn write_body_set_gravity_scale(&mut self, body: BodyId, scale: f32) {
189 self.begin_record(RecOp::BodySetGravityScale as u8);
190 self.buffer.append_body_id(body);
191 self.buffer.append_f32(scale);
192 self.end_record();
193 }
194
195 pub fn write_body_set_awake(&mut self, body: BodyId, awake: bool) {
197 self.begin_record(RecOp::BodySetAwake as u8);
198 self.buffer.append_body_id(body);
199 self.buffer.append_bool(awake);
200 self.end_record();
201 }
202
203 pub fn write_body_enable_sleep(&mut self, body: BodyId, flag: bool) {
205 self.begin_record(RecOp::BodyEnableSleep as u8);
206 self.buffer.append_body_id(body);
207 self.buffer.append_bool(flag);
208 self.end_record();
209 }
210
211 pub fn write_body_set_sleep_threshold(&mut self, body: BodyId, threshold: f32) {
213 self.begin_record(RecOp::BodySetSleepThreshold as u8);
214 self.buffer.append_body_id(body);
215 self.buffer.append_f32(threshold);
216 self.end_record();
217 }
218
219 pub fn write_body_disable(&mut self, body: BodyId) {
221 self.begin_record(RecOp::BodyDisable as u8);
222 self.buffer.append_body_id(body);
223 self.end_record();
224 }
225
226 pub fn write_body_enable(&mut self, body: BodyId) {
228 self.begin_record(RecOp::BodyEnable as u8);
229 self.buffer.append_body_id(body);
230 self.end_record();
231 }
232
233 pub fn write_body_set_motion_locks(&mut self, body: BodyId, locks: MotionLocks) {
235 self.begin_record(RecOp::BodySetMotionLocks as u8);
236 self.buffer.append_body_id(body);
237 self.buffer.append_locks(locks);
238 self.end_record();
239 }
240
241 pub fn write_body_set_bullet(&mut self, body: BodyId, flag: bool) {
243 self.begin_record(RecOp::BodySetBullet as u8);
244 self.buffer.append_body_id(body);
245 self.buffer.append_bool(flag);
246 self.end_record();
247 }
248
249 pub fn write_body_enable_contact_recycling(&mut self, body: BodyId, flag: bool) {
251 self.begin_record(RecOp::BodyEnableContactRecycling as u8);
252 self.buffer.append_body_id(body);
253 self.buffer.append_bool(flag);
254 self.end_record();
255 }
256
257 pub fn write_body_enable_hit_events(&mut self, body: BodyId, flag: bool) {
259 self.begin_record(RecOp::BodyEnableHitEvents as u8);
260 self.buffer.append_body_id(body);
261 self.buffer.append_bool(flag);
262 self.end_record();
263 }
264}