AudioTab.xaml.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using Content.Client.Administration.Managers;
  2. using Content.Client.Audio;
  3. using Content.Shared.CCVar;
  4. using Robust.Client.Audio;
  5. using Robust.Client.AutoGenerated;
  6. using Robust.Client.UserInterface;
  7. using Robust.Client.UserInterface.XAML;
  8. using Robust.Shared;
  9. using Robust.Shared.Configuration;
  10. namespace Content.Client.Options.UI.Tabs;
  11. [GenerateTypedNameReferences]
  12. public sealed partial class AudioTab : Control
  13. {
  14. [Dependency] private readonly IAudioManager _audio = default!;
  15. [Dependency] private readonly IClientAdminManager _admin = default!;
  16. [Dependency] private readonly IConfigurationManager _cfg = default!;
  17. public AudioTab()
  18. {
  19. RobustXamlLoader.Load(this);
  20. IoCManager.InjectDependencies(this);
  21. var masterVolume = Control.AddOptionPercentSlider(
  22. CVars.AudioMasterVolume,
  23. SliderVolumeMaster,
  24. scale: ContentAudioSystem.MasterVolumeMultiplier);
  25. masterVolume.ImmediateValueChanged += OnMasterVolumeSliderChanged;
  26. Control.AddOptionPercentSlider(
  27. CVars.MidiVolume,
  28. SliderVolumeMidi,
  29. scale: ContentAudioSystem.MidiVolumeMultiplier);
  30. Control.AddOptionPercentSlider(
  31. CCVars.AmbientMusicVolume,
  32. SliderVolumeAmbientMusic,
  33. scale: ContentAudioSystem.AmbientMusicMultiplier);
  34. Control.AddOptionPercentSlider(
  35. CCVars.AmbienceVolume,
  36. SliderVolumeAmbience,
  37. scale: ContentAudioSystem.AmbienceMultiplier);
  38. Control.AddOptionPercentSlider(
  39. CCVars.LobbyMusicVolume,
  40. SliderVolumeLobby,
  41. scale: ContentAudioSystem.LobbyMultiplier);
  42. Control.AddOptionPercentSlider(
  43. CCVars.InterfaceVolume,
  44. SliderVolumeInterface,
  45. scale: ContentAudioSystem.InterfaceMultiplier);
  46. Control.AddOptionSlider(
  47. CCVars.MaxAmbientSources,
  48. SliderMaxAmbienceSounds,
  49. _cfg.GetCVar(CCVars.MinMaxAmbientSourcesConfigured),
  50. _cfg.GetCVar(CCVars.MaxMaxAmbientSourcesConfigured));
  51. Control.AddOptionCheckBox(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox);
  52. Control.AddOptionCheckBox(CCVars.RestartSoundsEnabled, RestartSoundsCheckBox);
  53. Control.AddOptionCheckBox(CCVars.EventMusicEnabled, EventMusicCheckBox);
  54. Control.AddOptionCheckBox(CCVars.AdminSoundsEnabled, AdminSoundsCheckBox);
  55. Control.AddOptionCheckBox(CCVars.BwoinkSoundEnabled, BwoinkSoundCheckBox);
  56. Control.Initialize();
  57. }
  58. protected override void EnteredTree()
  59. {
  60. base.EnteredTree();
  61. _admin.AdminStatusUpdated += UpdateAdminButtonsVisibility;
  62. UpdateAdminButtonsVisibility();
  63. }
  64. protected override void ExitedTree()
  65. {
  66. base.ExitedTree();
  67. _admin.AdminStatusUpdated -= UpdateAdminButtonsVisibility;
  68. }
  69. private void UpdateAdminButtonsVisibility()
  70. {
  71. BwoinkSoundCheckBox.Visible = _admin.IsActive();
  72. }
  73. private void OnMasterVolumeSliderChanged(float value)
  74. {
  75. // TODO: I was thinking of giving OptionsTabControlRow a flag to "set CVar immediately", but I'm deferring that
  76. // until there's a proper system for enforcing people don't close the window with pending changes.
  77. _audio.SetMasterGain(value);
  78. }
  79. }