| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using Content.Shared.CCVar;
- using Robust.Client.Audio;
- using Robust.Client.ResourceManagement;
- using Robust.Client.UserInterface.Controllers;
- using Robust.Shared.Audio.Sources;
- using Robust.Shared.Configuration;
- namespace Content.Client.Audio;
- public sealed class AudioUIController : UIController
- {
- [Dependency] private readonly IAudioManager _audioManager = default!;
- [Dependency] private readonly IConfigurationManager _configManager = default!;
- [Dependency] private readonly IResourceCache _cache = default!;
- private float _interfaceGain;
- private IAudioSource? _clickSource;
- private IAudioSource? _hoverSource;
- private const float ClickGain = 0.25f;
- private const float HoverGain = 0.05f;
- public override void Initialize()
- {
- base.Initialize();
- /*
- * This exists to load UI sounds outside of the game sim.
- */
- // No unsub coz never shuts down until program exit.
- _configManager.OnValueChanged(CCVars.UIClickSound, SetClickSound, true);
- _configManager.OnValueChanged(CCVars.UIHoverSound, SetHoverSound, true);
- _configManager.OnValueChanged(CCVars.InterfaceVolume, SetInterfaceVolume, true);
- }
- private void SetInterfaceVolume(float obj)
- {
- _interfaceGain = obj;
- if (_clickSource != null)
- {
- _clickSource.Gain = ClickGain * _interfaceGain;
- }
- if (_hoverSource != null)
- {
- _hoverSource.Gain = HoverGain * _interfaceGain;
- }
- }
- private void SetClickSound(string value)
- {
- if (!string.IsNullOrEmpty(value))
- {
- var resource = GetSoundOrFallback(value, CCVars.UIClickSound.DefaultValue);
- var source =
- _audioManager.CreateAudioSource(resource);
- if (source != null)
- {
- source.Gain = ClickGain * _interfaceGain;
- source.Global = true;
- }
- _clickSource = source;
- UIManager.SetClickSound(source);
- }
- else
- {
- UIManager.SetClickSound(null);
- }
- }
- private void SetHoverSound(string value)
- {
- if (!string.IsNullOrEmpty(value))
- {
- var hoverResource = GetSoundOrFallback(value, CCVars.UIHoverSound.DefaultValue);
- var hoverSource =
- _audioManager.CreateAudioSource(hoverResource);
- if (hoverSource != null)
- {
- hoverSource.Gain = HoverGain * _interfaceGain;
- hoverSource.Global = true;
- }
- _hoverSource = hoverSource;
- UIManager.SetHoverSound(hoverSource);
- }
- else
- {
- UIManager.SetHoverSound(null);
- }
- }
- private AudioResource GetSoundOrFallback(string path, string fallback)
- {
- if (!_cache.TryGetResource(path, out AudioResource? resource))
- return _cache.GetResource<AudioResource>(fallback);
- return resource;
- }
- }
|