void MLControllerConnected(byte controllerId) { #if PLATFORM_LUMIN MLInput.Controller mlController = MLInput.GetController(controllerId); if (mlController.Type == MLInput.Controller.ControlType.Control) { if (!ConnectedControllers.ContainsKey(controllerId)) { Handedness handedness = mlController.Hand == MLInput.Hand.Right ? Handedness.Right : Handedness.Left; switch (CurrentControllerSettings) { case HandSettings.None: return; case HandSettings.Left: if (handedness != Handedness.Left) { return; } break; case HandSettings.Right: if (handedness != Handedness.Right) { return; } break; case HandSettings.Both: break; } var pointers = RequestPointers(SupportedControllerType.GenericUnity, handedness); var inputSourceType = InputSourceType.Controller; IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; var inputSource = inputSystem?.RequestNewGenericInputSource($"Magic Leap {handedness} Controller", pointers, inputSourceType); MagicLeapMRTKController controller = new MagicLeapMRTKController(mlController, TrackingState.Tracked, handedness, inputSource); for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } inputSystem?.RaiseSourceDetected(controller.InputSource, controller); ConnectedControllers[controllerId] = new MLControllerContainer() { controllerId = controllerId, mrtkController = controller }; trackedControls.Add(controller); } } #endif }
IEnumerator ConnectOnValidPosition(byte controllerId) { #if PLATFORM_LUMIN MLInput.Controller mlController = MLInput.GetController(controllerId); Vector3 initialPosition = mlController.Position; while (initialPosition == mlController.Position) { yield return(null); } if (mlController.Type == MLInput.Controller.ControlType.Control) { if (!ConnectedControllers.ContainsKey(controllerId)) { Handedness handedness = mlController.Hand == MLInput.Hand.Right ? Handedness.Right : Handedness.Left; if (!IsHandednessValid(handedness, CurrentControllerSettings)) { yield break; } var pointers = RequestPointers(SupportedControllerType.GenericUnity, handedness); var inputSourceType = InputSourceType.Controller; var inputSource = Service?.RequestNewGenericInputSource($"Magic Leap {handedness} Controller", pointers, inputSourceType); MagicLeapMRTKController controller = new MagicLeapMRTKController(mlController, TrackingState.Tracked, handedness, inputSource); for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } Service?.RaiseSourceDetected(controller.InputSource, controller); ConnectedControllers[controllerId] = new MLControllerContainer() { controllerId = controllerId, mrtkController = controller }; trackedControls.Add(controller); } } #endif }