// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using UnityEngine;
using UnityEngine.Events;
namespace Microsoft.MixedReality.Toolkit.Input
{
///
/// Utility component to hook up Unity events to the OnFocusEnter and OnFocusExit events.
///
[AddComponentMenu("Scripts/MRTK/SDK/FocusHandler")]
public class FocusHandler : MonoBehaviour, IMixedRealityFocusHandler
{
[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;
///
/// Whether input events should be marked as used after handling so other handlers in the same game object ignore them.
///
public bool MarkEventsAsUsed
{
get { return markEventsAsUsed; }
set { markEventsAsUsed = value; }
}
[SerializeField]
[Tooltip("Event which is triggered when focus begins.")]
private UnityEvent onFocusEnterEvent = new UnityEvent();
///
/// Event which is triggered when focus begins.
///
public UnityEvent OnFocusEnterEvent
{
get { return onFocusEnterEvent; }
set { onFocusEnterEvent = value; }
}
[SerializeField]
[Tooltip("Event which is triggered when focus ends.")]
private UnityEvent onFocusExitEvent = new UnityEvent();
///
/// Event which is triggered when focus ends.
///
public UnityEvent OnFocusExitEvent
{
get { return onFocusExitEvent; }
set { onFocusExitEvent = value; }
}
///
public void OnFocusEnter(FocusEventData eventData)
{
if (!eventData.used)
{
onFocusEnterEvent.Invoke();
if (markEventsAsUsed)
{
eventData.Use();
}
}
}
///
public void OnFocusExit(FocusEventData eventData)
{
if (!eventData.used)
{
onFocusExitEvent.Invoke();
if (markEventsAsUsed)
{
eventData.Use();
}
}
}
}
}