From fbbcd076cf37b362cd6a584699cdee3d71d692ae Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 15:48:28 -0500 Subject: [PATCH] feat: extend sdxr_start to handle additional root events and save state response --- bridge/src/lib.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bridge/src/lib.rs b/bridge/src/lib.rs index e8cab1b..c15e80b 100644 --- a/bridge/src/lib.rs +++ b/bridge/src/lib.rs @@ -16,6 +16,7 @@ use stardust_xr_asteroids::{ use stardust_xr_asteroids::{CustomElement, Transformable, Projector, Context}; use stardust_xr_molecules::accent_color::AccentColor; use stardust_xr_fusion::objects::connect_client as fusion_connect_client; +use stardust_xr_fusion::node::NodeType; use stardust_xr_fusion::root::RootAspect; use tokio::runtime::Runtime; @@ -211,9 +212,19 @@ pub extern "C" fn sdxr_start(app_id: *const std::os::raw::c_char) -> i32 { let mut projector = Projector::create(&state, &context, client.get_root().clone().as_spatial_ref(), "/".into()); println!("[bridge] Persistent event loop running"); let event_loop = client.sync_event_loop(|client, flow| { + use stardust_xr_fusion::root::{RootEvent, ClientState as SaveStatePayload}; let mut frames = vec![]; while let Some(re) = client.get_root().recv_root_event() { - if let stardust_xr_fusion::root::RootEvent::Frame { info } = re { frames.push(info); } + match re { + RootEvent::Ping { response } => { + let _ = response.send_ok(()); + } + RootEvent::Frame { info } => frames.push(info), + RootEvent::SaveState { response } => { + let payload = SaveStatePayload { data: None, root: client.get_root().id(), spatial_anchors: Default::default() }; + let _ = response.send_ok(payload); + } + } } if frames.is_empty() { return; } for frame in frames {