eye-therapy-2 / Assets / Scripts / Hands / DirectInteractorHelper.cs
DirectInteractorHelper.cs
Raw
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

[RequireComponent(typeof(XRDirectInteractor))]
public class DirectInteractorHelper : MonoBehaviour, IListener
{
    [SerializeField] private LayerMask toggleInteractionLayer = 0;
    [SerializeField] private EVENT_TYPE deactivationEvent = EVENT_TYPE.DUMMY;
    private XRDirectInteractor interactor;

    private void Awake()
    {
        interactor = GetComponent<XRDirectInteractor>();
        EventManager.Instance.AddListener(deactivationEvent, this);
    }

    private void OnEnable()
    {
        interactor.hoverEntered.AddListener(OnHoverEnter);
        interactor.hoverExited.AddListener(OnHoverExit);
    }

    private void OnDisable()
    {
        interactor.hoverEntered.RemoveListener(OnHoverEnter);
        interactor.hoverExited.RemoveListener(OnHoverExit);
    }

    public void OnHoverEnter(HoverEnterEventArgs args)
    {
        if (toggleInteractionLayer == (toggleInteractionLayer | (1 << args.interactable.gameObject.layer)))
        {
            interactor.selectActionTrigger = XRBaseControllerInteractor.InputTriggerType.Toggle;
        }
    }

    public void OnHoverExit(HoverExitEventArgs args)
    {
        interactor.selectActionTrigger = XRBaseControllerInteractor.InputTriggerType.StateChange;
    }

    public void OnEvent<T>(EVENT_TYPE eventType, Component Sender, T param = default)
    {
        if (eventType == deactivationEvent) interactor.selectActionTrigger = XRBaseControllerInteractor.InputTriggerType.StateChange;
    }
}