Skip to main content

box3d_rust/recording/write_ops/
query.rs

1//! Framed query 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::distance::ShapeProxy;
8use crate::geometry::Capsule;
9use crate::id::WorldId;
10use crate::math_functions::{Aabb, Pos, Vec3};
11use crate::types::QueryFilter;
12
13use crate::recording::ops::RecOp;
14use crate::recording::session::Recording;
15
16impl Recording {
17    /// Write framed `QueryOverlapAABB` op.
18    pub fn write_query_overlap_aabb(&mut self, world: WorldId, aabb: Aabb, filter: &QueryFilter) {
19        self.begin_record(RecOp::QueryOverlapAABB as u8);
20        self.buffer.append_world_id(world);
21        self.buffer.append_aabb(aabb);
22        self.buffer.append_query_filter(filter);
23        self.end_record();
24    }
25
26    /// Write framed `QueryOverlapShape` op.
27    pub fn write_query_overlap_shape(
28        &mut self,
29        world: WorldId,
30        origin: Pos,
31        proxy: &ShapeProxy,
32        filter: &QueryFilter,
33    ) {
34        self.begin_record(RecOp::QueryOverlapShape as u8);
35        self.buffer.append_world_id(world);
36        self.buffer.append_pos(origin);
37        self.buffer.append_shape_proxy(proxy);
38        self.buffer.append_query_filter(filter);
39        self.end_record();
40    }
41
42    /// Write framed `QueryCastRay` op.
43    pub fn write_query_cast_ray(
44        &mut self,
45        world: WorldId,
46        origin: Pos,
47        translation: Vec3,
48        filter: &QueryFilter,
49    ) {
50        self.begin_record(RecOp::QueryCastRay as u8);
51        self.buffer.append_world_id(world);
52        self.buffer.append_pos(origin);
53        self.buffer.append_vec3(translation);
54        self.buffer.append_query_filter(filter);
55        self.end_record();
56    }
57
58    /// Write framed `QueryCastShape` op.
59    pub fn write_query_cast_shape(
60        &mut self,
61        world: WorldId,
62        origin: Pos,
63        proxy: &ShapeProxy,
64        translation: Vec3,
65        filter: &QueryFilter,
66    ) {
67        self.begin_record(RecOp::QueryCastShape as u8);
68        self.buffer.append_world_id(world);
69        self.buffer.append_pos(origin);
70        self.buffer.append_shape_proxy(proxy);
71        self.buffer.append_vec3(translation);
72        self.buffer.append_query_filter(filter);
73        self.end_record();
74    }
75
76    /// Write framed `QueryCastRayClosest` op.
77    pub fn write_query_cast_ray_closest(
78        &mut self,
79        world: WorldId,
80        origin: Pos,
81        translation: Vec3,
82        filter: &QueryFilter,
83    ) {
84        self.begin_record(RecOp::QueryCastRayClosest as u8);
85        self.buffer.append_world_id(world);
86        self.buffer.append_pos(origin);
87        self.buffer.append_vec3(translation);
88        self.buffer.append_query_filter(filter);
89        self.end_record();
90    }
91
92    /// Write framed `QueryCastMover` op.
93    pub fn write_query_cast_mover(
94        &mut self,
95        world: WorldId,
96        origin: Pos,
97        mover: Capsule,
98        translation: Vec3,
99        filter: &QueryFilter,
100    ) {
101        self.begin_record(RecOp::QueryCastMover as u8);
102        self.buffer.append_world_id(world);
103        self.buffer.append_pos(origin);
104        self.buffer.append_capsule(mover);
105        self.buffer.append_vec3(translation);
106        self.buffer.append_query_filter(filter);
107        self.end_record();
108    }
109
110    /// Write framed `QueryCollideMover` op.
111    pub fn write_query_collide_mover(
112        &mut self,
113        world: WorldId,
114        origin: Pos,
115        mover: Capsule,
116        filter: &QueryFilter,
117    ) {
118        self.begin_record(RecOp::QueryCollideMover as u8);
119        self.buffer.append_world_id(world);
120        self.buffer.append_pos(origin);
121        self.buffer.append_capsule(mover);
122        self.buffer.append_query_filter(filter);
123        self.end_record();
124    }
125
126    /// Write framed `QueryTag` op.
127    pub fn write_query_tag(&mut self, key: u64) {
128        self.begin_record(RecOp::QueryTag as u8);
129        self.buffer.append_u64(key);
130        self.end_record();
131    }
132
133    /// Write framed `StateHash` op.
134    pub fn write_state_hash(&mut self, world: WorldId, hash: u64) {
135        self.begin_record(RecOp::StateHash as u8);
136        self.buffer.append_world_id(world);
137        self.buffer.append_u64(hash);
138        self.end_record();
139    }
140
141    /// Write framed `RecordingBounds` op.
142    pub fn write_recording_bounds(&mut self, bounds: Aabb) {
143        self.begin_record(RecOp::RecordingBounds as u8);
144        self.buffer.append_aabb(bounds);
145        self.end_record();
146    }
147}