send osc parameters based on device role, cleanup usings
This commit is contained in:
@@ -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)],
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user