Skip to main content

box3d_rust/recording/write_ops/
world.rs

1//! Framed world op writers for `Recording`, split from ops.rs to satisfy
2//! the file-length limit. Layouts mirror recording_ops.inl.
3//!
4//! SPDX-FileCopyrightText: 2026 Erin Catto
5//! SPDX-License-Identifier: MIT
6
7use crate::id::WorldId;
8use crate::math_functions::Vec3;
9use crate::types::ExplosionDef;
10
11use crate::recording::ops::RecOp;
12use crate::recording::session::Recording;
13
14impl Recording {
15    /// Write framed `DestroyWorld` op.
16    pub fn write_destroy_world(&mut self, world: WorldId) {
17        self.begin_record(RecOp::DestroyWorld as u8);
18        self.buffer.append_world_id(world);
19        self.end_record();
20    }
21
22    /// Write framed `Step` op.
23    pub fn write_step(&mut self, world: WorldId, dt: f32, sub_step_count: i32) {
24        self.begin_record(RecOp::Step as u8);
25        self.buffer.append_world_id(world);
26        self.buffer.append_f32(dt);
27        self.buffer.append_i32(sub_step_count);
28        self.end_record();
29    }
30
31    /// Write framed `WorldEnableSleeping` op.
32    pub fn write_world_enable_sleeping(&mut self, world: WorldId, flag: bool) {
33        self.begin_record(RecOp::WorldEnableSleeping as u8);
34        self.buffer.append_world_id(world);
35        self.buffer.append_bool(flag);
36        self.end_record();
37    }
38
39    /// Write framed `WorldEnableContinuous` op.
40    pub fn write_world_enable_continuous(&mut self, world: WorldId, flag: bool) {
41        self.begin_record(RecOp::WorldEnableContinuous as u8);
42        self.buffer.append_world_id(world);
43        self.buffer.append_bool(flag);
44        self.end_record();
45    }
46
47    /// Write framed `WorldSetRestitutionThreshold` op.
48    pub fn write_world_set_restitution_threshold(&mut self, world: WorldId, value: f32) {
49        self.begin_record(RecOp::WorldSetRestitutionThreshold as u8);
50        self.buffer.append_world_id(world);
51        self.buffer.append_f32(value);
52        self.end_record();
53    }
54
55    /// Write framed `WorldSetHitEventThreshold` op.
56    pub fn write_world_set_hit_event_threshold(&mut self, world: WorldId, value: f32) {
57        self.begin_record(RecOp::WorldSetHitEventThreshold as u8);
58        self.buffer.append_world_id(world);
59        self.buffer.append_f32(value);
60        self.end_record();
61    }
62
63    /// Write framed `WorldSetGravity` op.
64    pub fn write_world_set_gravity(&mut self, world: WorldId, gravity: Vec3) {
65        self.begin_record(RecOp::WorldSetGravity as u8);
66        self.buffer.append_world_id(world);
67        self.buffer.append_vec3(gravity);
68        self.end_record();
69    }
70
71    /// Write framed `WorldExplode` op.
72    pub fn write_world_explode(&mut self, world: WorldId, def: ExplosionDef) {
73        self.begin_record(RecOp::WorldExplode as u8);
74        self.buffer.append_world_id(world);
75        self.buffer.append_explosion_def(def);
76        self.end_record();
77    }
78
79    /// Write framed `WorldSetContactTuning` op.
80    pub fn write_world_set_contact_tuning(
81        &mut self,
82        world: WorldId,
83        hertz: f32,
84        damping_ratio: f32,
85        contact_speed: f32,
86    ) {
87        self.begin_record(RecOp::WorldSetContactTuning as u8);
88        self.buffer.append_world_id(world);
89        self.buffer.append_f32(hertz);
90        self.buffer.append_f32(damping_ratio);
91        self.buffer.append_f32(contact_speed);
92        self.end_record();
93    }
94
95    /// Write framed `WorldSetContactRecycleDistance` op.
96    pub fn write_world_set_contact_recycle_distance(
97        &mut self,
98        world: WorldId,
99        recycle_distance: f32,
100    ) {
101        self.begin_record(RecOp::WorldSetContactRecycleDistance as u8);
102        self.buffer.append_world_id(world);
103        self.buffer.append_f32(recycle_distance);
104        self.end_record();
105    }
106
107    /// Write framed `WorldSetMaximumLinearSpeed` op.
108    pub fn write_world_set_maximum_linear_speed(
109        &mut self,
110        world: WorldId,
111        maximum_linear_speed: f32,
112    ) {
113        self.begin_record(RecOp::WorldSetMaximumLinearSpeed as u8);
114        self.buffer.append_world_id(world);
115        self.buffer.append_f32(maximum_linear_speed);
116        self.end_record();
117    }
118
119    /// Write framed `WorldEnableWarmStarting` op.
120    pub fn write_world_enable_warm_starting(&mut self, world: WorldId, flag: bool) {
121        self.begin_record(RecOp::WorldEnableWarmStarting as u8);
122        self.buffer.append_world_id(world);
123        self.buffer.append_bool(flag);
124        self.end_record();
125    }
126
127    /// Write framed `WorldRebuildStaticTree` op.
128    pub fn write_world_rebuild_static_tree(&mut self, world: WorldId) {
129        self.begin_record(RecOp::WorldRebuildStaticTree as u8);
130        self.buffer.append_world_id(world);
131        self.end_record();
132    }
133
134    /// Write framed `WorldEnableSpeculative` op.
135    pub fn write_world_enable_speculative(&mut self, world: WorldId, flag: bool) {
136        self.begin_record(RecOp::WorldEnableSpeculative as u8);
137        self.buffer.append_world_id(world);
138        self.buffer.append_bool(flag);
139        self.end_record();
140    }
141}