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