box3d_rust/recording/write_ops/
shape.rs1use crate::geometry::{Capsule, Sphere, SurfaceMaterial};
8use crate::id::{BodyId, ShapeId};
9use crate::math_functions::Vec3;
10use crate::types::{Filter, ShapeDef};
11
12use crate::recording::ops::RecOp;
13use crate::recording::session::Recording;
14
15impl Recording {
16 pub fn write_create_sphere_shape(
18 &mut self,
19 body: BodyId,
20 def: &ShapeDef,
21 sphere: Sphere,
22 ret_id: ShapeId,
23 ) {
24 self.begin_record(RecOp::CreateSphereShape as u8);
25 self.buffer.append_body_id(body);
26 self.buffer.append_shape_def(def);
27 self.buffer.append_sphere(sphere);
28 self.buffer.append_shape_id(ret_id);
29 self.end_record();
30 }
31
32 pub fn write_create_capsule_shape(
34 &mut self,
35 body: BodyId,
36 def: &ShapeDef,
37 capsule: Capsule,
38 ret_id: ShapeId,
39 ) {
40 self.begin_record(RecOp::CreateCapsuleShape as u8);
41 self.buffer.append_body_id(body);
42 self.buffer.append_shape_def(def);
43 self.buffer.append_capsule(capsule);
44 self.buffer.append_shape_id(ret_id);
45 self.end_record();
46 }
47
48 pub fn write_create_hull_shape(
50 &mut self,
51 body: BodyId,
52 def: &ShapeDef,
53 geometry_id: u32,
54 ret_id: ShapeId,
55 ) {
56 self.begin_record(RecOp::CreateHullShape as u8);
57 self.buffer.append_body_id(body);
58 self.buffer.append_shape_def(def);
59 self.buffer.append_u32(geometry_id);
60 self.buffer.append_shape_id(ret_id);
61 self.end_record();
62 }
63
64 pub fn write_create_mesh_shape(
66 &mut self,
67 body: BodyId,
68 def: &ShapeDef,
69 geometry_id: u32,
70 scale: Vec3,
71 ret_id: ShapeId,
72 ) {
73 self.begin_record(RecOp::CreateMeshShape as u8);
74 self.buffer.append_body_id(body);
75 self.buffer.append_shape_def(def);
76 self.buffer.append_u32(geometry_id);
77 self.buffer.append_vec3(scale);
78 self.buffer.append_shape_id(ret_id);
79 self.end_record();
80 }
81
82 pub fn write_create_height_field_shape(
84 &mut self,
85 body: BodyId,
86 def: &ShapeDef,
87 geometry_id: u32,
88 ret_id: ShapeId,
89 ) {
90 self.begin_record(RecOp::CreateHeightFieldShape as u8);
91 self.buffer.append_body_id(body);
92 self.buffer.append_shape_def(def);
93 self.buffer.append_u32(geometry_id);
94 self.buffer.append_shape_id(ret_id);
95 self.end_record();
96 }
97
98 pub fn write_create_compound_shape(
100 &mut self,
101 body: BodyId,
102 def: &ShapeDef,
103 geometry_id: u32,
104 ret_id: ShapeId,
105 ) {
106 self.begin_record(RecOp::CreateCompoundShape as u8);
107 self.buffer.append_body_id(body);
108 self.buffer.append_shape_def(def);
109 self.buffer.append_u32(geometry_id);
110 self.buffer.append_shape_id(ret_id);
111 self.end_record();
112 }
113
114 pub fn write_destroy_shape(&mut self, shape: ShapeId, update_body_mass: bool) {
116 self.begin_record(RecOp::DestroyShape as u8);
117 self.buffer.append_shape_id(shape);
118 self.buffer.append_bool(update_body_mass);
119 self.end_record();
120 }
121
122 pub fn write_shape_set_density(
124 &mut self,
125 shape: ShapeId,
126 density: f32,
127 update_body_mass: bool,
128 ) {
129 self.begin_record(RecOp::ShapeSetDensity as u8);
130 self.buffer.append_shape_id(shape);
131 self.buffer.append_f32(density);
132 self.buffer.append_bool(update_body_mass);
133 self.end_record();
134 }
135
136 pub fn write_shape_set_friction(&mut self, shape: ShapeId, friction: f32) {
138 self.begin_record(RecOp::ShapeSetFriction as u8);
139 self.buffer.append_shape_id(shape);
140 self.buffer.append_f32(friction);
141 self.end_record();
142 }
143
144 pub fn write_shape_set_restitution(&mut self, shape: ShapeId, restitution: f32) {
146 self.begin_record(RecOp::ShapeSetRestitution as u8);
147 self.buffer.append_shape_id(shape);
148 self.buffer.append_f32(restitution);
149 self.end_record();
150 }
151
152 pub fn write_shape_set_surface_material(&mut self, shape: ShapeId, material: SurfaceMaterial) {
154 self.begin_record(RecOp::ShapeSetSurfaceMaterial as u8);
155 self.buffer.append_shape_id(shape);
156 self.buffer.append_material(material);
157 self.end_record();
158 }
159
160 pub fn write_shape_set_filter(
162 &mut self,
163 shape: ShapeId,
164 filter: Filter,
165 invoke_contacts: bool,
166 ) {
167 self.begin_record(RecOp::ShapeSetFilter as u8);
168 self.buffer.append_shape_id(shape);
169 self.buffer.append_filter(filter);
170 self.buffer.append_bool(invoke_contacts);
171 self.end_record();
172 }
173
174 pub fn write_shape_enable_sensor_events(&mut self, shape: ShapeId, flag: bool) {
176 self.begin_record(RecOp::ShapeEnableSensorEvents as u8);
177 self.buffer.append_shape_id(shape);
178 self.buffer.append_bool(flag);
179 self.end_record();
180 }
181
182 pub fn write_shape_enable_contact_events(&mut self, shape: ShapeId, flag: bool) {
184 self.begin_record(RecOp::ShapeEnableContactEvents as u8);
185 self.buffer.append_shape_id(shape);
186 self.buffer.append_bool(flag);
187 self.end_record();
188 }
189
190 pub fn write_shape_enable_pre_solve_events(&mut self, shape: ShapeId, flag: bool) {
192 self.begin_record(RecOp::ShapeEnablePreSolveEvents as u8);
193 self.buffer.append_shape_id(shape);
194 self.buffer.append_bool(flag);
195 self.end_record();
196 }
197
198 pub fn write_shape_enable_hit_events(&mut self, shape: ShapeId, flag: bool) {
200 self.begin_record(RecOp::ShapeEnableHitEvents as u8);
201 self.buffer.append_shape_id(shape);
202 self.buffer.append_bool(flag);
203 self.end_record();
204 }
205
206 pub fn write_shape_set_sphere(&mut self, shape: ShapeId, sphere: Sphere) {
208 self.begin_record(RecOp::ShapeSetSphere as u8);
209 self.buffer.append_shape_id(shape);
210 self.buffer.append_sphere(sphere);
211 self.end_record();
212 }
213
214 pub fn write_shape_set_capsule(&mut self, shape: ShapeId, capsule: Capsule) {
216 self.begin_record(RecOp::ShapeSetCapsule as u8);
217 self.buffer.append_shape_id(shape);
218 self.buffer.append_capsule(capsule);
219 self.end_record();
220 }
221
222 pub fn write_shape_apply_wind(
224 &mut self,
225 shape: ShapeId,
226 wind: Vec3,
227 drag: f32,
228 lift: f32,
229 max_speed: f32,
230 wake: bool,
231 ) {
232 self.begin_record(RecOp::ShapeApplyWind as u8);
233 self.buffer.append_shape_id(shape);
234 self.buffer.append_vec3(wind);
235 self.buffer.append_f32(drag);
236 self.buffer.append_f32(lift);
237 self.buffer.append_f32(max_speed);
238 self.buffer.append_bool(wake);
239 self.end_record();
240 }
241
242 pub fn write_shape_set_name(&mut self, shape: ShapeId, name: &str) {
244 self.begin_record(RecOp::ShapeSetName as u8);
245 self.buffer.append_shape_id(shape);
246 self.buffer.append_str(name);
247 self.end_record();
248 }
249}