private OculusQuestHand GetOrAddHand(Handedness handedness) { if (trackedHands.ContainsKey(handedness)) { return(trackedHands[handedness]); } // Add new hand var pointers = RequestPointers(SupportedControllerType.ArticulatedHand, handedness); var inputSourceType = InputSourceType.Hand; IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; var inputSource = inputSystem?.RequestNewGenericInputSource($"Oculus Quest {handedness} Hand", pointers, inputSourceType); var controller = new OculusQuestHand(TrackingState.Tracked, handedness, inputSource); controller.SetupConfiguration(typeof(OculusQuestHand)); for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } inputSystem?.RaiseSourceDetected(controller.InputSource, controller); trackedHands.Add(handedness, controller); return(controller); }
private void RemoveHandDevice(OculusQuestHand hand) { if (hand == null) { return; } if (teleportPointers.TryGetValue(hand.ControllerHandedness, out CustomTeleportPointer pointer)) { if (pointer == null) { teleportPointers.Remove(hand.ControllerHandedness); } else { pointer.Reset(); } hand.TeleportPointer = null; } hand.CleanupHand(); inactiveHandCache.Add(hand.ControllerHandedness, hand); CoreServices.InputSystem?.RaiseSourceLost(hand.InputSource, hand); trackedHands.Remove(hand.ControllerHandedness); RecyclePointers(hand.InputSource); }
private OculusQuestHand GetOrAddHand(Handedness handedness, OVRHand ovrHand) { if (trackedHands.ContainsKey(handedness)) { return(trackedHands[handedness]); } Material handMaterial = null; if (handedness == Handedness.Right) { if (rightHandMaterial == null) { rightHandMaterial = new Material(MRTKOculusConfig.Instance.CustomHandMaterial); } handMaterial = rightHandMaterial; } else { if (leftHandMaterial == null) { leftHandMaterial = new Material(MRTKOculusConfig.Instance.CustomHandMaterial); } handMaterial = leftHandMaterial; } // Add new hand var pointers = RequestPointers(SupportedControllerType.ArticulatedHand, handedness); var inputSourceType = InputSourceType.Hand; IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; var inputSource = inputSystem?.RequestNewGenericInputSource($"Oculus Quest {handedness} Hand", pointers, inputSourceType); var controller = new OculusQuestHand(TrackingState.Tracked, handedness, ovrHand, handMaterial, inputSource); // Code is obsolete later on, but older MRTK versions require it. #pragma warning disable 618 controller.SetupConfiguration(typeof(OculusQuestHand)); #pragma warning restore 618 for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } inputSystem?.RaiseSourceDetected(controller.InputSource, controller); trackedHands.Add(handedness, controller); return(controller); }
private OculusQuestHand GetOrAddHand(Handedness handedness, OVRHand ovrHand) { if (trackedHands.ContainsKey(handedness)) { return(trackedHands[handedness]); } // Add new hand var pointers = RequestPointers(SupportedControllerType.ArticulatedHand, handedness); var inputSourceType = InputSourceType.Hand; IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; var inputSource = inputSystem?.RequestNewGenericInputSource($"Oculus Quest {handedness} Hand", pointers, inputSourceType); if (!inactiveHandCache.TryGetValue(handedness, out var handController)) { handController = new OculusQuestHand(TrackingState.Tracked, handedness, inputSource); handController.InitializeHand(ovrHand, MRTKOculusConfig.Instance.CustomHandMaterial); } inactiveHandCache.Remove(handedness); for (int i = 0; i < handController.InputSource?.Pointers?.Length; i++) { handController.InputSource.Pointers[i].Controller = handController; } if (MRTKOculusConfig.Instance.ActiveTeleportPointerMode == MRTKOculusConfig.TeleportPointerMode.Custom && MixedRealityToolkit.IsTeleportSystemEnabled) { if (!teleportPointers.TryGetValue(handedness, out CustomTeleportPointer pointer)) { pointer = GameObject.Instantiate(MRTKOculusConfig.Instance.CustomTeleportPrefab).GetComponent <CustomTeleportPointer>(); pointer.gameObject.SetActive(false); teleportPointers.Add(handedness, pointer); } pointer.Controller = handController; handController.TeleportPointer = pointer; } inputSystem?.RaiseSourceDetected(handController.InputSource, handController); trackedHands.Add(handedness, handController); return(handController); }
private void RemoveHandDevice(OculusQuestHand hand) { if (hand == null) { return; } CoreServices.InputSystem?.RaiseSourceLost(hand.InputSource, hand); trackedHands.Remove(hand.ControllerHandedness); // Recycle pointers makes this loop obsolete. If you are using an MRTK version older than 2.3, please use the loop and comment out RecyclePointers. /* * foreach (IMixedRealityPointer pointer in hand.InputSource.Pointers) * { * if (pointer == null) continue; * pointer.Controller = null; * } */ RecyclePointers(hand.InputSource); }