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];