using Content.Shared.CCVar; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared; using Robust.Shared.Configuration; using Robust.Shared.IoC; using Robust.Shared.Localization; namespace Content.Client.EscapeMenu.UI.Tabs { [GenerateTypedNameReferences] public partial class AudioTab : Control { [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IClydeAudio _clydeAudio = default!; public AudioTab() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); AmbienceCheckBox.Pressed = _cfg.GetCVar(CCVars.AmbienceBasicEnabled); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); ApplyButton.OnPressed += OnApplyButtonPressed; ResetButton.OnPressed += OnResetButtonPressed; MasterVolumeSlider.OnValueChanged += OnMasterVolumeSliderChanged; AmbienceCheckBox.OnToggled += OnAmbienceCheckToggled; LobbyMusicCheckBox.OnToggled += OnLobbyMusicCheckToggled; Reset(); } protected override void Dispose(bool disposing) { ApplyButton.OnPressed -= OnApplyButtonPressed; ResetButton.OnPressed -= OnResetButtonPressed; MasterVolumeSlider.OnValueChanged -= OnMasterVolumeSliderChanged; AmbienceCheckBox.OnToggled -= OnAmbienceCheckToggled; base.Dispose(disposing); } private void OnMasterVolumeSliderChanged(Range range) { MasterVolumeLabel.Text = Loc.GetString("ui-options-volume-percent", ("volume", MasterVolumeSlider.Value / 100)); _clydeAudio.SetMasterVolume(MasterVolumeSlider.Value / 100); UpdateChanges(); } private void OnAmbienceCheckToggled(BaseButton.ButtonEventArgs args) { UpdateChanges(); } private void OnLobbyMusicCheckToggled(BaseButton.ButtonEventArgs args) { UpdateChanges(); } private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) { _cfg.SetCVar(CVars.AudioMasterVolume, MasterVolumeSlider.Value / 100); _cfg.SetCVar(CCVars.AmbienceBasicEnabled, AmbienceCheckBox.Pressed); _cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed); _cfg.SaveToFile(); UpdateChanges(); } private void OnResetButtonPressed(BaseButton.ButtonEventArgs args) { Reset(); } private void Reset() { MasterVolumeSlider.Value = _cfg.GetCVar(CVars.AudioMasterVolume) * 100; MasterVolumeLabel.Text = Loc.GetString("ui-options-volume-percent", ("volume", MasterVolumeSlider.Value / 100)); AmbienceCheckBox.Pressed = _cfg.GetCVar(CCVars.AmbienceBasicEnabled); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); UpdateChanges(); } private void UpdateChanges() { var isMasterVolumeSame = System.Math.Abs(MasterVolumeSlider.Value - _cfg.GetCVar(CVars.AudioMasterVolume) * 100) < 0.01f; var isAmbienceSame = AmbienceCheckBox.Pressed == _cfg.GetCVar(CCVars.AmbienceBasicEnabled); var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled); var isEverythingSame = isMasterVolumeSame && isAmbienceSame && isLobbySame; ApplyButton.Disabled = isEverythingSame; ResetButton.Disabled = isEverythingSame; } } }