using UnityEngine; using UnityEngine.UI; namespace LobbyRelaySample.UI { public class LobbyUserVolumeUI : MonoBehaviour { [SerializeField] private UIPanelBase m_volumeSliderContainer; [SerializeField] private UIPanelBase m_muteToggleContainer; [SerializeField] [Tooltip("This is shown for other players, to mute them.")] private GameObject m_muteIcon; [SerializeField] [Tooltip("This is shown for the local player, to make it clearer that they are muting themselves.")] private GameObject m_micMuteIcon; public bool IsLocalPlayer { private get; set; } [SerializeField] private Slider m_volumeSlider; [SerializeField] private Toggle m_muteToggle; /// /// When the user is being added, we want the UI to reset to the default values. /// (We don't do this if the user is already in the lobby so that the previous values are retained. E.g. If they're too loud and volume was lowered, keep it lowered on reenable.) /// public void EnableVoice(bool shouldResetUi) { if (shouldResetUi) { m_volumeSlider.SetValueWithoutNotify(vivox.VivoxUserHandler.NormalizedVolumeDefault); m_muteToggle.SetIsOnWithoutNotify(false); } if (IsLocalPlayer) { m_volumeSliderContainer.Hide(0); m_muteToggleContainer.Show(); m_muteIcon.SetActive(false); m_micMuteIcon.SetActive(true); } else { m_volumeSliderContainer.Show(); m_muteToggleContainer.Show(); m_muteIcon.SetActive(true); m_micMuteIcon.SetActive(false); } } /// /// When the user leaves the lobby (but not if they just lose voice access for some reason, e.g. device disconnect), reset state to the default values. /// (We can't just do this during Enable since it could cause Vivox to have a state conflict during participant add.) /// public void DisableVoice(bool shouldResetUi) { if (shouldResetUi) { m_volumeSlider.value = vivox.VivoxUserHandler.NormalizedVolumeDefault; m_muteToggle.isOn = false; } m_volumeSliderContainer.Hide(0.4f); m_muteToggleContainer.Hide(0.4f); m_muteIcon.SetActive(true); m_micMuteIcon.SetActive(false); } } }