// 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(); } } } } }