send osc parameters based on device role, cleanup usings

This commit is contained in:
cubee
2024-11-22 15:03:33 +11:00
committed by galister
parent 546b38204c
commit c96ead7cf0

View File

@@ -9,8 +9,8 @@ use rosc::{OscMessage, OscPacket, OscType};
use crate::overlays::{keyboard::KEYBOARD_NAME, watch::WATCH_NAME}; use crate::overlays::{keyboard::KEYBOARD_NAME, watch::WATCH_NAME};
use crate::{ use crate::{
backend::input::{TrackedDevice, TrackedDeviceRole}, backend::input::TrackedDeviceRole,
state::{AppState}, state::AppState,
}; };
use super::common::OverlayContainer; use super::common::OverlayContainer;
@@ -98,26 +98,59 @@ impl OscSender {
// battery levels // battery levels
let mut tracker_idx = 0; let mut tracker_idx = 0;
let devices = &app.input_state.devices; for device in &app.input_state.devices {
for device in devices {
// i believe soc is the battery level, based on input.rs (status.charge)
let level = device.soc.unwrap();
let mut parameter = "";
match device.role { match device.role {
TrackedDeviceRole::None => { TrackedDeviceRole::None => {}
TrackedDeviceRole::Hmd => {
// XSOverlay style (float)
// this parameter doesn't exist, but it's a stepping stone for 0-1 values (i presume XSOverlay would use the full name headset and not the abbreviation hmd)
parameter = "headsetBattery";
// legacy OVR Toolkit style (int)
// according to their docs, OVR Toolkit is now supposed to use float 0-1.
// as of 20 Nov 2024 they still use int 0-100, but this may change in a future update.
//TODO: remove once their implementation matches the docs
self.send_message(
"/avatar/parameters/hmdBattery".into(),
vec![OscType::Int((level * 100.0f32).round() as i32)],
)?;
} }
TrackedDeviceRole::Hmd => { TrackedDeviceRole::LeftHand => {parameter = "leftControllerBattery"}
TrackedDeviceRole::RightHand => {parameter = "rightControllerBattery"}
} TrackedDeviceRole::Tracker => {
TrackedDeviceRole::LeftHand => { //TODO: the String gets dropped i presume once this block exits (so parameter becomes a null ref), even if i set owner.
//parameter = format!("tracker{tracker_idx}Battery").as_str();
} // ^^^^^^ "temporary value dropped" ^^^^^
TrackedDeviceRole::RightHand => {
}
TrackedDeviceRole::Tracker => {
//TODO: figure out how to put the number in the string properly as above (which doesn't work)
parameter = "tracker";
tracker_idx += 1; tracker_idx += 1;
} }
} }
// send level parameter
if !parameter.is_empty() {
//TODO: figure out how to put the number in the string, ideally in the TrackedDeviceRole section where we set the parameters
if parameter == "tracker" {
self.send_message(
format!("/avatar/parameters/tracker{tracker_idx}Battery").into(),
vec![OscType::Float(level)],
)?;
}
else {
self.send_message(
format!("/avatar/parameters/{parameter}").into(),
vec![OscType::Float(level)],
)?;
}
}
} }