From b441d4dffc95c5479a94ec264ef0cfe39d963426 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 20:38:37 -0500 Subject: [PATCH] feat: add functions to set node model, texture, color, dimensions, and entity type --- bridge/src/lib.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/bridge/src/lib.rs b/bridge/src/lib.rs index 8dc5ece..4cf3891 100644 --- a/bridge/src/lib.rs +++ b/bridge/src/lib.rs @@ -382,3 +382,55 @@ pub extern "C" fn sdxr_node_count() -> u64 { let ctrl = CTRL.lock().unwrap(); ctrl.nodes.len() as u64 } + +#[no_mangle] +pub extern "C" fn sdxr_set_node_model(id: u64, model_url: *const std::os::raw::c_char) -> i32 { + if !STARTED.load(Ordering::SeqCst) { return -1; } + let url = unsafe { CStr::from_ptr(model_url) }.to_string_lossy().to_string(); + let ctrl = CTRL.lock().unwrap(); + if let Some(tx) = &ctrl.tx { + let _ = tx.send(Command::SetModel { c_id: id, model_url: url }); + } + 0 +} + +#[no_mangle] +pub extern "C" fn sdxr_set_node_texture(id: u64, texture_url: *const std::os::raw::c_char) -> i32 { + if !STARTED.load(Ordering::SeqCst) { return -1; } + let url = unsafe { CStr::from_ptr(texture_url) }.to_string_lossy().to_string(); + let ctrl = CTRL.lock().unwrap(); + if let Some(tx) = &ctrl.tx { + let _ = tx.send(Command::SetTexture { c_id: id, texture_url: url }); + } + 0 +} + +#[no_mangle] +pub extern "C" fn sdxr_set_node_color(id: u64, r: f32, g: f32, b: f32, a: f32) -> i32 { + if !STARTED.load(Ordering::SeqCst) { return -1; } + let ctrl = CTRL.lock().unwrap(); + if let Some(tx) = &ctrl.tx { + let _ = tx.send(Command::SetColor { c_id: id, color: [r, g, b, a] }); + } + 0 +} + +#[no_mangle] +pub extern "C" fn sdxr_set_node_dimensions(id: u64, x: f32, y: f32, z: f32) -> i32 { + if !STARTED.load(Ordering::SeqCst) { return -1; } + let ctrl = CTRL.lock().unwrap(); + if let Some(tx) = &ctrl.tx { + let _ = tx.send(Command::SetDimensions { c_id: id, dimensions: [x, y, z] }); + } + 0 +} + +#[no_mangle] +pub extern "C" fn sdxr_set_node_entity_type(id: u64, entity_type: u8) -> i32 { + if !STARTED.load(Ordering::SeqCst) { return -1; } + let ctrl = CTRL.lock().unwrap(); + if let Some(tx) = &ctrl.tx { + let _ = tx.send(Command::SetEntityType { c_id: id, entity_type }); + } + 0 +}