diff --git a/bridge/src/lib.rs b/bridge/src/lib.rs index 5c626eb..5181fa4 100644 --- a/bridge/src/lib.rs +++ b/bridge/src/lib.rs @@ -1,3 +1,30 @@ +#[no_mangle] +pub extern "C" fn sdxr_query_nodes_by_distance( + center_x: f32, + center_y: f32, + center_z: f32, + radius: f32, + out_ids: *mut u64, + max_count: usize, +) -> usize { + if !STARTED.load(Ordering::SeqCst) { return 0; } + let ctrl = CTRL.lock().unwrap(); + let mut found = 0; + let center = glam::Vec3::new(center_x, center_y, center_z); + for (id, node) in ctrl.nodes.iter() { + let (_scale, _rot, trans) = node.transform.to_scale_rotation_translation(); + let pos = glam::Vec3::new(trans.x, trans.y, trans.z); + if (pos - center).length() <= radius { + if found < max_count { + unsafe { *out_ids.add(found) = *id; } + found += 1; + } else { + break; + } + } + } + found +} // Rust C-ABI bridge for StardustXR client integration. mod model_downloader;