// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using UnityEngine;
namespace Microsoft.MixedReality.Toolkit.Input
{
///
/// Script used to raise Unity Events in response to pointer events.
///
[AddComponentMenu("Scripts/MRTK/SDK/PointerHandler")]
public class PointerHandler : BaseInputHandler, IMixedRealityPointerHandler
{
[SerializeField]
[Tooltip("Whether input events should be marked as used after handling so other handlers in the same game object ignore them")]
private bool MarkEventsAsUsed = false;
///
/// Unity event raised on pointer down.
///
public PointerUnityEvent OnPointerDown = new PointerUnityEvent();
///
/// Unity event raised on pointer up.
///
public PointerUnityEvent OnPointerUp = new PointerUnityEvent();
///
/// Unity event raised on pointer clicked.
///
public PointerUnityEvent OnPointerClicked = new PointerUnityEvent();
///
/// Unity event raised every frame the pointer is down.
///
public PointerUnityEvent OnPointerDragged = new PointerUnityEvent();
#region InputSystemGlobalHandlerListener Implementation
protected override void RegisterHandlers()
{
CoreServices.InputSystem?.RegisterHandler(this);
}
protected override void UnregisterHandlers()
{
CoreServices.InputSystem?.UnregisterHandler(this);
}
#endregion InputSystemGlobalHandlerListener Implementation
#region IMixedRealityPointerHandler
void IMixedRealityPointerHandler.OnPointerDown(MixedRealityPointerEventData eventData)
{
if (!eventData.used)
{
OnPointerDown.Invoke(eventData);
if (MarkEventsAsUsed)
{
eventData.Use();
}
}
}
void IMixedRealityPointerHandler.OnPointerUp(MixedRealityPointerEventData eventData)
{
if (!eventData.used)
{
OnPointerUp.Invoke(eventData);
if (MarkEventsAsUsed)
{
eventData.Use();
}
}
}
void IMixedRealityPointerHandler.OnPointerClicked(MixedRealityPointerEventData eventData)
{
if (!eventData.used)
{
OnPointerClicked.Invoke(eventData);
if (MarkEventsAsUsed)
{
eventData.Use();
}
}
}
void IMixedRealityPointerHandler.OnPointerDragged(MixedRealityPointerEventData eventData)
{
if (!eventData.used)
{
OnPointerDragged.Invoke(eventData);
if (MarkEventsAsUsed)
{
eventData.Use();
}
}
}
#endregion IMixedRealityPointerHandler
}
}