72 lines
1.9 KiB
C#

using Audio;
using UnityEngine.XR.Interaction.Toolkit;
namespace Bow
{
public class Notch : XRSocketInteractor
{
public AudioClipGroup nockSounds;
public AudioClipGroup releaseSounds;
private Puller _puller = null;
private Arrow _currentArrow = null;
protected override void Awake()
{
base.Awake();
_puller = GetComponent<Puller>();
}
protected override void OnEnable()
{
base.OnEnable();
_puller.onSelectExited.AddListener(TryToReleaseArrow);
}
protected override void OnDisable()
{
base.OnDisable();
_puller.onSelectExited.RemoveListener(TryToReleaseArrow);
}
protected override void OnSelectEntered(XRBaseInteractable interactable)
{
base.OnSelectEntered(interactable);
StoreArrow(interactable);
}
private void StoreArrow(XRBaseInteractable interactable)
{
if (!(interactable is Arrow arrow)) return;
_currentArrow = arrow;
nockSounds.Play();
}
private void TryToReleaseArrow(XRBaseInteractor interactor)
{
if (!_currentArrow) return;
ForceDeselect();
ReleaseArrow();
}
private void ForceDeselect()
{
_currentArrow.OnSelectExiting(this);
_currentArrow.OnSelectExited(this);
base.OnSelectExiting(_currentArrow);
base.OnSelectExited(_currentArrow);
}
private void ReleaseArrow()
{
_currentArrow.Release(_puller.PullAmount);
_currentArrow = null;
releaseSounds.Play();
}
public override XRBaseInteractable.MovementType? selectedInteractableMovementTypeOverride =>
XRBaseInteractable.MovementType.Instantaneous;
}
}