// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine;
namespace Microsoft.MixedReality.Toolkit.UI
{
///
/// This script provides cursor context for the manipulation handler
///
[AddComponentMenu("Scripts/MRTK/SDK/CursorContextManipulationHandler")]
[RequireComponent(typeof(ManipulationHandler))]
public class CursorContextManipulationHandler : MonoBehaviour
{
private ManipulationHandler manipulationHandler;
private CursorContextInfo contextInfo;
private int hoverCount = 0;
private void Start()
{
manipulationHandler = GetComponent();
contextInfo = gameObject.EnsureComponent();
contextInfo.ObjectCenter = transform;
manipulationHandler.OnHoverEntered.AddListener(ManipulatorHoverEntered);
manipulationHandler.OnHoverExited.AddListener(ManipulatorHoverExited);
manipulationHandler.OnManipulationStarted.AddListener(ManipulationStarted);
manipulationHandler.OnManipulationEnded.AddListener(ManipulationEnded);
}
private void ManipulatorHoverEntered(ManipulationEventData manipEvent)
{
hoverCount++;
if (hoverCount >= 2 &&
manipulationHandler.ManipulationType != ManipulationHandler.HandMovementType.OneHandedOnly)
{
contextInfo.CurrentCursorAction = CursorContextInfo.CursorAction.Move;
}
}
private void ManipulatorHoverExited(ManipulationEventData manipEvent)
{
hoverCount--;
if (hoverCount < 2)
{
contextInfo.CurrentCursorAction = CursorContextInfo.CursorAction.None;
}
}
private void ManipulationStarted(ManipulationEventData manipEvent)
{
contextInfo.CurrentCursorAction = CursorContextInfo.CursorAction.Move;
}
private void ManipulationEnded(ManipulationEventData manipEvent)
{
contextInfo.CurrentCursorAction = hoverCount < 2 ?
CursorContextInfo.CursorAction.None :
CursorContextInfo.CursorAction.Move;
}
}
}