using TMPro; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit; public class RadioTransmitter : XRGrabInteractable { public delegate void OnPlayerPickUpDelegate(); public event OnPlayerPickUpDelegate OnPlayerPickUp; public delegate void OnPlayerFinishedSpeakingDelegate(); public event OnPlayerFinishedSpeakingDelegate OnPlayerFinishedSpeaking; [Header("Custom Config")] public FMODWhisperBridge fmodWhisperBridge; public ReleasableButton radioButton; public TextMeshProUGUI computerScreen; // Start is called before the first frame update void Start() { radioButton.OnButtonPressed += OnRadioButtonPressed; radioButton.OnButtonReleased += OnRadioButtonReleased; } // Update is called once per frame void Update() { } protected override void OnSelectEntered(SelectEnterEventArgs args) { base.OnSelectEntered(args); OnPlayerPickUp?.Invoke(); } private void OnRadioButtonPressed() { fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdated; fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished; AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject); fmodWhisperBridge.ActivateRecording(); } private void OnRadioButtonReleased() { fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdated; fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished; AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject); fmodWhisperBridge.DeactivateRecording(); } private void OnPlayerSpeechUpdated(string text) { computerScreen.text = text; OnPlayerFinishedSpeaking?.Invoke(); } private void OnPlayerSpeechFinished(string playerText) { OnPlayerFinishedSpeaking?.Invoke(); } }