* Add option to disable bwoink sound. * Now it's working only with active admin status. * No bwoink, only "notification sound" * Moar changes * Another one
97 lines
3.3 KiB
C#
97 lines
3.3 KiB
C#
using Content.Client.Administration.Managers;
|
|
using Content.Client.Audio;
|
|
using Content.Shared.CCVar;
|
|
using Robust.Client.Audio;
|
|
using Robust.Client.AutoGenerated;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.XAML;
|
|
using Robust.Shared;
|
|
using Robust.Shared.Configuration;
|
|
|
|
namespace Content.Client.Options.UI.Tabs;
|
|
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class AudioTab : Control
|
|
{
|
|
[Dependency] private readonly IAudioManager _audio = default!;
|
|
[Dependency] private readonly IClientAdminManager _admin = default!;
|
|
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
|
|
|
public AudioTab()
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
IoCManager.InjectDependencies(this);
|
|
|
|
var masterVolume = Control.AddOptionPercentSlider(
|
|
CVars.AudioMasterVolume,
|
|
SliderVolumeMaster,
|
|
scale: ContentAudioSystem.MasterVolumeMultiplier);
|
|
masterVolume.ImmediateValueChanged += OnMasterVolumeSliderChanged;
|
|
|
|
Control.AddOptionPercentSlider(
|
|
CVars.MidiVolume,
|
|
SliderVolumeMidi,
|
|
scale: ContentAudioSystem.MidiVolumeMultiplier);
|
|
|
|
Control.AddOptionPercentSlider(
|
|
CCVars.AmbientMusicVolume,
|
|
SliderVolumeAmbientMusic,
|
|
scale: ContentAudioSystem.AmbientMusicMultiplier);
|
|
|
|
Control.AddOptionPercentSlider(
|
|
CCVars.AmbienceVolume,
|
|
SliderVolumeAmbience,
|
|
scale: ContentAudioSystem.AmbienceMultiplier);
|
|
|
|
Control.AddOptionPercentSlider(
|
|
CCVars.LobbyMusicVolume,
|
|
SliderVolumeLobby,
|
|
scale: ContentAudioSystem.LobbyMultiplier);
|
|
|
|
Control.AddOptionPercentSlider(
|
|
CCVars.InterfaceVolume,
|
|
SliderVolumeInterface,
|
|
scale: ContentAudioSystem.InterfaceMultiplier);
|
|
|
|
Control.AddOptionSlider(
|
|
CCVars.MaxAmbientSources,
|
|
SliderMaxAmbienceSounds,
|
|
_cfg.GetCVar(CCVars.MinMaxAmbientSourcesConfigured),
|
|
_cfg.GetCVar(CCVars.MaxMaxAmbientSourcesConfigured));
|
|
|
|
Control.AddOptionCheckBox(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox);
|
|
Control.AddOptionCheckBox(CCVars.RestartSoundsEnabled, RestartSoundsCheckBox);
|
|
Control.AddOptionCheckBox(CCVars.EventMusicEnabled, EventMusicCheckBox);
|
|
Control.AddOptionCheckBox(CCVars.AdminSoundsEnabled, AdminSoundsCheckBox);
|
|
Control.AddOptionCheckBox(CCVars.BwoinkSoundEnabled, BwoinkSoundCheckBox);
|
|
|
|
Control.Initialize();
|
|
}
|
|
|
|
protected override void EnteredTree()
|
|
{
|
|
base.EnteredTree();
|
|
_admin.AdminStatusUpdated += UpdateAdminButtonsVisibility;
|
|
UpdateAdminButtonsVisibility();
|
|
}
|
|
|
|
protected override void ExitedTree()
|
|
{
|
|
base.ExitedTree();
|
|
_admin.AdminStatusUpdated -= UpdateAdminButtonsVisibility;
|
|
}
|
|
|
|
|
|
private void UpdateAdminButtonsVisibility()
|
|
{
|
|
BwoinkSoundCheckBox.Visible = _admin.IsActive();
|
|
}
|
|
|
|
private void OnMasterVolumeSliderChanged(float value)
|
|
{
|
|
// TODO: I was thinking of giving OptionsTabControlRow a flag to "set CVar immediately", but I'm deferring that
|
|
// until there's a proper system for enforcing people don't close the window with pending changes.
|
|
_audio.SetMasterGain(value);
|
|
}
|
|
}
|