From 1072d3beebdfd51c8483494c1d7f8426809abf76 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 21:45:01 -0500 Subject: [PATCH] feat: enhance sdxr_start function with D-Bus connection handling and projector integration --- bridge/src/lib.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/bridge/src/lib.rs b/bridge/src/lib.rs index 3a75fc1..7ddf760 100644 --- a/bridge/src/lib.rs +++ b/bridge/src/lib.rs @@ -11,8 +11,9 @@ use stardust_xr_asteroids as ast; // alias for brevity use stardust_xr_asteroids::{ client::ClientState, elements::{PlaySpace, Spatial, Lines}, - Migrate, Reify, CustomElement, + Migrate, Reify, CustomElement, 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; @@ -247,7 +248,21 @@ pub extern "C" fn sdxr_start(app_id: *const std::os::raw::c_char) -> i32 { } }; + let dbus_connection = match ast::client::connect_client().await { + Ok(conn) => conn, + Err(_) => { + eprintln!("[bridge] Failed to connect to D-Bus, using fallback"); + match fusion_connect_client().await { + Ok(c2) => c2, + Err(_) => return, + } + } + }; + + let accent_color = AccentColor::new(dbus_connection.clone()); + let context = Context { dbus_connection, accent_color }; let mut state = BridgeState::default(); + let mut projector = Projector::create(&state, &context, client.get_root().clone().as_spatial_ref(), "/".into()); println!("[bridge] Persistent event loop running"); let event_loop_fut = client.sync_event_loop(|client, flow| { @@ -270,7 +285,9 @@ pub extern "C" fn sdxr_start(app_id: *const std::os::raw::c_char) -> i32 { for frame in frames { if let Ok(ctrl) = CTRL.lock() { if let Some(shared) = &ctrl.shared_state { if let Ok(ss) = shared.lock() { state.nodes = ss.nodes.clone(); } } } state.on_frame(&frame); + projector.frame(&context, &frame, &mut state); } + projector.update(&context, &mut state); if STOP_REQUESTED.load(Ordering::SeqCst) { flow.stop(); } }); if let Err(e) = event_loop_fut.await {