From 8217cf31b3fc150e15eefce29bdc518540bce3b8 Mon Sep 17 00:00:00 2001 From: Benjamin Saunders Date: Sun, 14 May 2017 12:17:27 -0700 Subject: [PATCH] Controller role accessors --- src/system/mod.rs | 18 +++++++++++++++++- src/tracking.rs | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/system/mod.rs b/src/system/mod.rs index 7d7241f..3cda889 100644 --- a/src/system/mod.rs +++ b/src/system/mod.rs @@ -136,6 +136,22 @@ impl<'a> System<'a> { green: coord.rfGreen }) } + + /// Returns the device index associated with a specific role, for example the left hand or the right hand. + pub fn tracked_device_index_for_controller_role(&self, role: TrackedControllerRole) -> Option { + let x = unsafe { self.0.GetTrackedDeviceIndexForControllerRole.unwrap()(role as sys::ETrackedControllerRole) }; + if x == tracked_device_index::INVALID { None } else { Some(x) } + } + + /// Returns the controller type associated with a device index. + pub fn get_controller_role_for_tracked_device_index(&self, i: TrackedDeviceIndex) -> Option { + let x = unsafe { self.0.GetControllerRoleForTrackedDeviceIndex.unwrap()(i) }; + match x { + sys::ETrackedControllerRole_ETrackedControllerRole_TrackedControllerRole_LeftHand => Some(TrackedControllerRole::LeftHand), + sys::ETrackedControllerRole_ETrackedControllerRole_TrackedControllerRole_RightHand => Some(TrackedControllerRole::RightHand), + _ => None, + } + } } /// Values represent the tangents of the half-angles from the center view axis @@ -156,4 +172,4 @@ pub struct DistortionCoordinates { pub red: [f32; 2], pub green: [f32; 2], pub blue: [f32; 2], -} \ No newline at end of file +} diff --git a/src/tracking.rs b/src/tracking.rs index f26f5dd..1554198 100644 --- a/src/tracking.rs +++ b/src/tracking.rs @@ -58,3 +58,9 @@ pub mod tracked_device_index { } pub type TrackedDeviceProperty = sys::ETrackedDeviceProperty; + +#[derive(Debug, Copy, Clone)] +pub enum TrackedControllerRole { + LeftHand = sys::ETrackedControllerRole_ETrackedControllerRole_TrackedControllerRole_LeftHand as isize, + RightHand = sys::ETrackedControllerRole_ETrackedControllerRole_TrackedControllerRole_RightHand as isize, +}