Files
rust-openvr/src/tracking.rs
2017-05-14 12:31:27 -07:00

69 lines
3.5 KiB
Rust

use openvr_sys as sys;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum TrackingUniverseOrigin {
Seated = sys::ETrackingUniverseOrigin_ETrackingUniverseOrigin_TrackingUniverseSeated as isize,
Standing = sys::ETrackingUniverseOrigin_ETrackingUniverseOrigin_TrackingUniverseStanding as isize,
RawAndUncalibrated = sys::ETrackingUniverseOrigin_ETrackingUniverseOrigin_TrackingUniverseRawAndUncalibrated as isize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TrackedDevicePose(sys::TrackedDevicePose_t);
impl TrackedDevicePose {
pub fn device_to_absolute_tracking(&self) -> &[[f32; 4]; 3] { &self.0.mDeviceToAbsoluteTracking.m }
pub fn velocity(&self) -> &[f32; 3] { &self.0.vVelocity.v }
pub fn angular_velocity(&self) -> &[f32; 3] { &self.0.vAngularVelocity.v }
pub fn tracking_result(&self) -> TrackingResult {
use self::TrackingResult::*;
match self.0.eTrackingResult {
sys::ETrackingResult_ETrackingResult_TrackingResult_Uninitialized => Uninitialized,
sys::ETrackingResult_ETrackingResult_TrackingResult_Calibrating_InProgress => CalibratingInProgress,
sys::ETrackingResult_ETrackingResult_TrackingResult_Calibrating_OutOfRange => CalibratingOutOfRange,
sys::ETrackingResult_ETrackingResult_TrackingResult_Running_OK => OK,
sys::ETrackingResult_ETrackingResult_TrackingResult_Running_OutOfRange => RunningOutOfRange,
_ => panic!("unrecognized tracking result")
}
}
pub fn pose_is_valid(&self) -> bool { self.0.bPoseIsValid }
pub fn device_is_connected(&self) -> bool { self.0.bDeviceIsConnected }
}
#[derive(Debug, Copy, Clone)]
pub enum TrackingResult {
Uninitialized = sys::ETrackingResult_ETrackingResult_TrackingResult_Uninitialized as isize,
CalibratingInProgress = sys::ETrackingResult_ETrackingResult_TrackingResult_Calibrating_InProgress as isize,
CalibratingOutOfRange = sys::ETrackingResult_ETrackingResult_TrackingResult_Calibrating_OutOfRange as isize,
OK = sys::ETrackingResult_ETrackingResult_TrackingResult_Running_OK as isize,
RunningOutOfRange = sys::ETrackingResult_ETrackingResult_TrackingResult_Running_OutOfRange as isize,
}
#[derive(Debug, Copy, Clone)]
pub enum TrackedDeviceClass {
Invalid = sys::ETrackedDeviceClass_ETrackedDeviceClass_TrackedDeviceClass_Invalid as isize,
HMD = sys::ETrackedDeviceClass_ETrackedDeviceClass_TrackedDeviceClass_HMD as isize,
Controller = sys::ETrackedDeviceClass_ETrackedDeviceClass_TrackedDeviceClass_Controller as isize,
GenericTracker = sys::ETrackedDeviceClass_ETrackedDeviceClass_TrackedDeviceClass_GenericTracker as isize,
TrackingReference = sys::ETrackedDeviceClass_ETrackedDeviceClass_TrackedDeviceClass_TrackingReference as isize,
DisplayRedirect = sys::ETrackedDeviceClass_ETrackedDeviceClass_TrackedDeviceClass_DisplayRedirect as isize,
}
pub type TrackedDeviceIndex = sys::TrackedDeviceIndex_t;
pub mod tracked_device_index {
use super::*;
pub const HMD: TrackedDeviceIndex = sys::k_unTrackedDeviceIndex_Hmd;
pub const INVALID: TrackedDeviceIndex = sys::k_unTrackedDeviceIndexInvalid;
}
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,
}
pub type TrackedDevicePoses = [TrackedDevicePose; sys::k_unMaxTrackedDeviceCount as usize];