From 546b38204c0ad8d3fd7c01750f0a9c66cd5bbc9e Mon Sep 17 00:00:00 2001 From: cubee Date: Fri, 22 Nov 2024 14:15:22 +1100 Subject: [PATCH] use AppState to get device roles i _understand_ now! basically, i did it the "wrong" way first by modifying openxr.rs and openvr.rs to pass battery levels to osc, when really i could have just made osc get the pre-formatted device details from AppState. live and learn, i'm new to rust anyway. --- src/backend/openvr/mod.rs | 2 +- src/backend/openxr/mod.rs | 2 +- src/backend/osc.rs | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/backend/openvr/mod.rs b/src/backend/openvr/mod.rs index 95e01a5..1c405cf 100644 --- a/src/backend/openvr/mod.rs +++ b/src/backend/openvr/mod.rs @@ -324,7 +324,7 @@ pub fn openvr_run(running: Arc, show_by_default: bool) -> Result<(), #[cfg(feature = "osc")] if let Some(ref mut sender) = osc_sender { - let _ = sender.send_params(&overlays); + let _ = sender.send_params(&overlays, &state); // i love inconsistent naming; in openxr.rs `state` is called `app_state` }; #[cfg(feature = "wayvr")] diff --git a/src/backend/openxr/mod.rs b/src/backend/openxr/mod.rs index 198093e..3a7f900 100644 --- a/src/backend/openxr/mod.rs +++ b/src/backend/openxr/mod.rs @@ -304,7 +304,7 @@ pub fn openxr_run(running: Arc, show_by_default: bool) -> Result<(), #[cfg(feature = "osc")] if let Some(ref mut sender) = osc_sender { - let _ = sender.send_params(&overlays); + let _ = sender.send_params(&overlays, &app_state); }; let (_, views) = xr_state.session.locate_views( diff --git a/src/backend/osc.rs b/src/backend/osc.rs index 6c16199..9fdb138 100644 --- a/src/backend/osc.rs +++ b/src/backend/osc.rs @@ -8,6 +8,11 @@ use rosc::{OscMessage, OscPacket, OscType}; use crate::overlays::{keyboard::KEYBOARD_NAME, watch::WATCH_NAME}; +use crate::{ + backend::input::{TrackedDevice, TrackedDeviceRole}, + state::{AppState}, +}; + use super::common::OverlayContainer; pub struct OscSender { @@ -46,7 +51,7 @@ impl OscSender { Ok(()) } - pub fn send_params(&mut self, overlays: &OverlayContainer) -> anyhow::Result<()> + pub fn send_params(&mut self, overlays: &OverlayContainer, app: &AppState) -> anyhow::Result<()> where D: Default, { @@ -90,6 +95,32 @@ impl OscSender { vec![OscType::Int(num_overlays)], )?; + // battery levels + let mut tracker_idx = 0; + + let devices = &app.input_state.devices; + for device in devices { + match device.role { + TrackedDeviceRole::None => { + + } + TrackedDeviceRole::Hmd => { + + } + TrackedDeviceRole::LeftHand => { + + } + TrackedDeviceRole::RightHand => { + + } + TrackedDeviceRole::Tracker => { + + tracker_idx += 1; + } + } + } + + Ok(()) } }