コード例 #1
0
        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
        }
コード例 #2
0
        void MLControllerDisconnected(byte controllerId)
        {
            MLControllerContainer controllerContainer = GetConnectedController(controllerId);

            if (controllerContainer != null)
            {
                IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem;
                inputSystem?.RaiseSourceLost(controllerContainer.mrtkController.InputSource, controllerContainer.mrtkController);
                trackedControls.Remove(controllerContainer.mrtkController);
                RecyclePointers(controllerContainer.mrtkController.InputSource);
                controllerContainer.mrtkController.CleanupController();
                ConnectedControllers.Remove(controllerId);
            }
            return;
        }
コード例 #3
0
        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
        }