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);
 }