public bool SetPoseSource(TrackedPoseDriver.DeviceType deviceType, TrackedPoseDriver.TrackedPose pose)
 {
     if (deviceType < (TrackedPoseDriver.DeviceType)TrackedPoseDriverDataDescription.DeviceData.Count)
     {
         TrackedPoseDriverDataDescription.PoseData poseData = TrackedPoseDriverDataDescription.DeviceData[(int)deviceType];
         for (int i = 0; i < poseData.Poses.Count; i++)
         {
             if (poseData.Poses[i] == pose)
             {
                 this.poseSource = pose;
                 return(true);
             }
         }
     }
     return(false);
 }
        private bool GetDataFromSource(TrackedPoseDriver.DeviceType device, TrackedPoseDriver.TrackedPose poseSource, out Pose resultPose)
        {
            bool result;

            switch (poseSource)
            {
            case TrackedPoseDriver.TrackedPose.LeftEye:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.LeftEye);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.LeftEye);
                result = true;
                break;

            case TrackedPoseDriver.TrackedPose.RightEye:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.RightEye);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.RightEye);
                result = true;
                break;

            case TrackedPoseDriver.TrackedPose.Center:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.CenterEye);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.CenterEye);
                result = true;
                break;

            case TrackedPoseDriver.TrackedPose.Head:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.Head);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.Head);
                result = true;
                break;

            case TrackedPoseDriver.TrackedPose.LeftPose:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.LeftHand);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.LeftHand);
                result = true;
                break;

            case TrackedPoseDriver.TrackedPose.RightPose:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.RightHand);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.RightHand);
                result = true;
                break;

            case TrackedPoseDriver.TrackedPose.ColorCamera:
                result = this.TryGetTangoPose(CoordinateFrame.CameraColor, out resultPose);
                break;

            case TrackedPoseDriver.TrackedPose.DepthCamera:
                result = this.TryGetTangoPose(CoordinateFrame.CameraDepth, out resultPose);
                break;

            case TrackedPoseDriver.TrackedPose.FisheyeCamera:
                result = this.TryGetTangoPose(CoordinateFrame.CameraFisheye, out resultPose);
                break;

            case TrackedPoseDriver.TrackedPose.Device:
                result = this.TryGetTangoPose(CoordinateFrame.Device, out resultPose);
                break;

            case TrackedPoseDriver.TrackedPose.RemotePose:
                resultPose.position = InputTracking.GetLocalPosition(XRNode.RightHand);
                resultPose.rotation = InputTracking.GetLocalRotation(XRNode.RightHand);
                result = true;
                break;

            default:
                resultPose = Pose.identity;
                result     = false;
                break;
            }
            return(result);
        }