/// <summary> /// Updates LED on the physical controller based on touch pad input. /// </summary> private void UpdateLED() { if (!_controllerConnectionHandler.IsControllerValid()) { return; } MLInputController controller = _controllerConnectionHandler.ConnectedController; if (controller.Touch1Active) { // Get angle of touchpad position. float angle = -Vector2.SignedAngle(Vector2.up, controller.Touch1PosAndForce); if (angle < 0.0f) { angle += 360.0f; } // Get the correct hour and map it to [0,6] int index = (int)((angle + HALF_HOUR_IN_DEGREES) * DEGREES_PER_HOUR) % LED_INDEX_DELTA; // Pass from hour to MLInputControllerFeedbackPatternLED index [0,6] -> [MAX_LED_INDEX, MIN_LED_INDEX + 1, ..., MAX_LED_INDEX - 1] index = (MAX_LED_INDEX + index > MAX_LED_INDEX) ? MIN_LED_INDEX + index : MAX_LED_INDEX; if (_lastLEDindex != index) { // a duration of 0 means leave it on indefinitely if (controller.TouchpadGesture.Type == MLInputControllerTouchpadGestureType.Swipe) { _color = MLInputControllerFeedbackColorLED.BrightCosmicPurple; } else if (controller.TouchpadGesture.Type == MLInputControllerTouchpadGestureType.Tap) { _color = MLInputControllerFeedbackColorLED.BrightCelestialBlue; } else if (controller.TouchpadGesture.Type == MLInputControllerTouchpadGestureType.RadialScroll) { _color = MLInputControllerFeedbackColorLED.BrightMissionRed; } else if (controller.TouchpadGesture.Type == MLInputControllerTouchpadGestureType.SecondForceDown) { _color = MLInputControllerFeedbackColorLED.PastelFloridaOrange; } controller.StartFeedbackPatternLED((MLInputControllerFeedbackPatternLED)index, _color, 0); _lastLEDindex = index; } } else if (_lastLEDindex != -1) { controller.StopFeedbackPatternLED(); _lastLEDindex = -1; } }
public MLResult StartFeedbackPatternEffectLED(MLInputControllerFeedbackEffectLED effect, MLInputControllerFeedbackEffectSpeedLED speed, MLInputControllerFeedbackPatternLED pattern, MLInputControllerFeedbackColorLED color, float duration) { duration = Mathf.Round(duration * 1000.0f); if (MLControllerNativeBindings.MLInputStartControllerFeedbackPatternEffectLED(controllerId, effect, speed, pattern, color, (uint)duration)) { return(MLResult.Create(MLResult.Code.Ok)); } MLResult result = MLResult.Create(MLResult.Code.UnspecifiedFailure, "UnityMagicLeap - MLInputStartControllerFeedbackPatternEffectLED() returned an error."); MLPluginLog.ErrorFormat("MLInputController.StartFeedbackPatternEffectLED failed. Reason: {0}", result); return(result); }
public static extern bool MLInputStartControllerFeedbackPatternEffectLED(byte controllerId, MLInputControllerFeedbackEffectLED effect, MLInputControllerFeedbackEffectSpeedLED speed, MLInputControllerFeedbackPatternLED pattern, MLInputControllerFeedbackColorLED color, uint duration);