// 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 } }