Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…Toolkit

# Conflicts:
#	source/MagicLeap-Tools/Code/Input/Control/ControlHaptics.cs
  • Loading branch information
Ross Kameny committed Jan 25, 2020
2 parents f151e3b + 91a7017 commit 827a773
Showing 1 changed file with 157 additions and 0 deletions.
157 changes: 157 additions & 0 deletions source/MagicLeap-Tools/Code/Input/Control/ControlHaptics.cs
@@ -0,0 +1,157 @@
// ---------------------------------------------------------------------
//
// Copyright (c) 2019 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// ---------------------------------------------------------------------

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if PLATFORM_LUMIN
using UnityEngine.XR.MagicLeap;
#endif

namespace MagicLeapTools
{
public class ControlHaptics : MonoBehaviour
{
#if PLATFORM_LUMIN
//Public Variables:
public ControlInput controlInput;
public HapticSetting triggerDown;
public HapticSetting touchDown;
public HapticSetting touchUp;
public HapticSetting forceTouchDown;
public HapticSetting forceTouchUp;
public HapticSetting radialMove;
public HapticSetting triggerHold;
public HapticSetting bumperHold;
public HapticSetting touchHold;

//Private Variables:
private readonly float _radialAngleAmount = 15;
private float _angleAccumulation;

//Init:
private void Reset()
{
//refs:
controlInput = GetComponent<ControlInput>();

triggerDown = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.Click, MLInputControllerFeedbackIntensity.High);
touchDown = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.Click, MLInputControllerFeedbackIntensity.Medium);
touchUp = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.Click, MLInputControllerFeedbackIntensity.Low);
forceTouchDown = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.ForceDown, MLInputControllerFeedbackIntensity.High);
forceTouchUp = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.ForceUp, MLInputControllerFeedbackIntensity.High);
radialMove = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.Tick, MLInputControllerFeedbackIntensity.Low);
triggerHold = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.ForceDown, MLInputControllerFeedbackIntensity.High);
bumperHold = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.ForceDown, MLInputControllerFeedbackIntensity.High);
touchHold = new HapticSetting(true, MLInputControllerFeedbackPatternVibe.ForceDown, MLInputControllerFeedbackIntensity.High);
}

//Flow:
private void OnEnable()
{
//hooks:
controlInput.OnTriggerDown.AddListener(HandleTriggerDown);
controlInput.OnTouchDown.AddListener(HandleTouchDown);
controlInput.OnForceTouchDown.AddListener(HandleForceTouchDown);
controlInput.OnForceTouchUp.AddListener(HandleForceTouchUp);
controlInput.OnTouchRadialMove.AddListener(HandleRadialMove);
controlInput.OnTouchUp.AddListener(HandleTouchUp);
controlInput.OnTriggerHold.AddListener(HandleTriggerHold);
controlInput.OnBumperHold.AddListener(HandleBumperHold);
controlInput.OnTouchHold.AddListener(HandleOnTouchHold);
}

private void OnDisable()
{
//unhooks:
controlInput.OnTriggerDown.RemoveListener(HandleTriggerDown);
controlInput.OnTouchDown.RemoveListener(HandleTouchDown);
controlInput.OnForceTouchDown.RemoveListener(HandleForceTouchDown);
controlInput.OnForceTouchUp.RemoveListener(HandleForceTouchUp);
controlInput.OnTouchRadialMove.RemoveListener(HandleRadialMove);
controlInput.OnTouchUp.RemoveListener(HandleTouchUp);
controlInput.OnTriggerHold.RemoveListener(HandleTriggerHold);
controlInput.OnBumperHold.RemoveListener(HandleBumperHold);
controlInput.OnTouchHold.RemoveListener(HandleOnTouchHold);
}

//Event Handlers:
private void HandleTriggerDown()
{
PerformHaptic(triggerDown);
}

private void HandleTouchDown(Vector4 touch)
{
PerformHaptic(touchDown);
}

private void HandleForceTouchDown()
{
PerformHaptic(forceTouchDown);
}

private void HandleForceTouchUp()
{
PerformHaptic(forceTouchUp);
}

private void HandleRadialMove(float angleDelta)
{
_angleAccumulation += Mathf.Abs(angleDelta);
if (_angleAccumulation > _radialAngleAmount)
{
PerformHaptic(radialMove);
_angleAccumulation = 0;
}
}

private void HandleTouchUp(Vector4 touch)
{
PerformHaptic(touchUp);
}

private void HandleTriggerHold()
{
PerformHaptic(triggerHold);
}

private void HandleBumperHold()
{
PerformHaptic(bumperHold);
}

private void HandleOnTouchHold()
{
PerformHaptic(touchHold);
}

//Public Methods:
public void StartHaptic(MLInputControllerFeedbackPatternVibe vibe, MLInputControllerFeedbackIntensity intensity)
{
controlInput.Control.StartFeedbackPatternVibe(vibe, intensity);
}

public void StopHaptic()
{
controlInput.Control.StopFeedbackPatternVibe();
}

//Private Methods:
private void PerformHaptic(HapticSetting settings)
{
if (!settings.enabled)
{
return;
}

controlInput.Control.StartFeedbackPatternVibe(settings.pattern, settings.intensity);
}
#endif
}
}

0 comments on commit 827a773

Please sign in to comment.