private void FindOutermostController(bool isLeft) { Vector outermostLocalPos = new Vector(isLeft ? -0.1F : 0.1F, 0, 0); for (int i = 0; i < Passer.OpenVR.k_unMaxTrackedDeviceCount; i++) { if (SteamDevice.GetDeviceClass(i) != Passer.ETrackedDeviceClass.Controller) { continue; } Passer.ETrackedControllerRole role = Passer.OpenVR.System.GetControllerRoleForTrackedDeviceIndex((uint)i); if ((isLeft && role == Passer.ETrackedControllerRole.LeftHand) || (!isLeft && role == Passer.ETrackedControllerRole.RightHand)) { trackerId = i; return; } Vector sensorLocalPos = Rotation.Inverse(SteamDevice.GetRotation(0)) * (SteamDevice.GetPosition(i) - SteamDevice.GetPosition(0)); // 0 = HMD if ((isLeft && sensorLocalPos.x < outermostLocalPos.x && role != Passer.ETrackedControllerRole.RightHand) || (!isLeft && sensorLocalPos.x > outermostLocalPos.x) && role != Passer.ETrackedControllerRole.LeftHand) { trackerId = i; outermostLocalPos = sensorLocalPos; } } }
public static bool IsRightController(uint sensorId) { Passer.ETrackedControllerRole role = Passer.OpenVR.System.GetControllerRoleForTrackedDeviceIndex(sensorId); return(role == Passer.ETrackedControllerRole.RightHand); }