diff --git a/Cargo.lock b/Cargo.lock index 4ff08e4..ef94f79 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,9 +112,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" [[package]] name = "approx" @@ -2482,7 +2482,7 @@ dependencies = [ [[package]] name = "ovr_overlay" version = "0.0.0" -source = "git+https://github.com/galister/ovr_overlay_oyasumi#4a1711248c1a0d57ad8e3266726c3407ee30418e" +source = "git+https://github.com/galister/ovr_overlay_oyasumi#e719339c017f36f090cb2ba87240580e9dff3b15" dependencies = [ "byteorder", "derive_more", @@ -2497,7 +2497,7 @@ dependencies = [ [[package]] name = "ovr_overlay_sys" version = "0.0.0" -source = "git+https://github.com/galister/ovr_overlay_oyasumi#4a1711248c1a0d57ad8e3266726c3407ee30418e" +source = "git+https://github.com/galister/ovr_overlay_oyasumi#e719339c017f36f090cb2ba87240580e9dff3b15" dependencies = [ "autocxx", "autocxx-build", @@ -2661,9 +2661,9 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "png" -version = "0.17.12" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c2378060fb13acff3ba0325b83442c1d2c44fbb76df481160ddc1687cce160" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -2996,9 +2996,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "same-file" @@ -3036,9 +3036,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" [[package]] name = "serde" @@ -3093,9 +3093,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.31" +version = "0.9.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e" +checksum = "8fd075d994154d4a774f95b51fb96bdc2832b0ea48425c92546073816cda1f2f" dependencies = [ "indexmap 2.2.3", "itoa", diff --git a/src/backend/openvr/input.rs b/src/backend/openvr/input.rs index 5d5b3f8..c0f3b33 100644 --- a/src/backend/openvr/input.rs +++ b/src/backend/openvr/input.rs @@ -209,47 +209,40 @@ impl OpenVrInputSource { pub fn update_devices(&mut self, system: &mut SystemManager, app: &mut AppState) { app.input_state.devices.clear(); - get_tracked_device(system, TrackedDeviceIndex::HMD, TrackedDeviceRole::Hmd).and_then( - |device| { + for idx in 0..TrackedDeviceIndex::MAX { + let device = TrackedDeviceIndex::new(idx as _).unwrap(); // safe + if !system.is_tracked_device_connected(device) { + continue; + } + + let class = system.get_tracked_device_class(device); + + let role = match class { + ETrackedDeviceClass::TrackedDeviceClass_HMD => TrackedDeviceRole::Hmd, + ETrackedDeviceClass::TrackedDeviceClass_Controller => { + let role = system.get_controller_role_for_tracked_device_index(device); + match role { + ETrackedControllerRole::TrackedControllerRole_LeftHand => { + TrackedDeviceRole::LeftHand + } + ETrackedControllerRole::TrackedControllerRole_RightHand => { + TrackedDeviceRole::RightHand + } + _ => continue, + } + } + ETrackedDeviceClass::TrackedDeviceClass_GenericTracker => { + TrackedDeviceRole::Tracker + } + _ => continue, + }; + + get_tracked_device(system, device, role).and_then(|device| { app.input_state.devices.push(device); Some(()) - }, - ); - - for controller_idx in system.get_sorted_tracked_device_indices_of_class( - ETrackedDeviceClass::TrackedDeviceClass_Controller, - TrackedDeviceIndex::HMD, - ) { - let sys_role = system.get_controller_role_for_tracked_device_index(controller_idx); - match sys_role { - ETrackedControllerRole::TrackedControllerRole_LeftHand => { - Some(TrackedDeviceRole::LeftHand) - } - ETrackedControllerRole::TrackedControllerRole_RightHand => { - Some(TrackedDeviceRole::RightHand) - } - _ => None, - } - .and_then(|role| { - get_tracked_device(system, controller_idx, role).and_then(|device| { - app.input_state.devices.push(device); - Some(()) - }) }); } - for tracker_idx in system.get_sorted_tracked_device_indices_of_class( - ETrackedDeviceClass::TrackedDeviceClass_GenericTracker, - TrackedDeviceIndex::HMD, - ) { - get_tracked_device(system, tracker_idx, TrackedDeviceRole::Tracker).and_then( - |device| { - app.input_state.devices.push(device); - Some(()) - }, - ); - } - app.input_state.devices.sort_by(|a, b| { (a.soc.is_none() as u8) .cmp(&(b.soc.is_none() as u8))