[UsedImplicitly]
public sealed class BackgroundAudioSystem : EntitySystem
{
+ /*
+ * TODO: Nuke this system and merge into contentaudiosystem
+ */
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly IBaseClient _client = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;
private readonly AudioParams _lobbyParams = new(-5f, 1, "Master", 0, 0, 0, true, 0f);
- private EntityUid? _lobbyStream;
+ public EntityUid? LobbyStream;
public override void Initialize()
{
public void StartLobbyMusic()
{
- if (_lobbyStream != null || !_configManager.GetCVar(CCVars.LobbyMusicEnabled))
+ if (LobbyStream != null || !_configManager.GetCVar(CCVars.LobbyMusicEnabled))
return;
var file = _gameTicker.LobbySong;
return;
}
- _lobbyStream = _audio.PlayGlobal(file, Filter.Local(), false,
+ LobbyStream = _audio.PlayGlobal(file, Filter.Local(), false,
_lobbyParams.WithVolume(_lobbyParams.Volume + SharedAudioSystem.GainToVolume(_configManager.GetCVar(CCVars.LobbyMusicVolume))))?.Entity;
}
private void EndLobbyMusic()
{
- _lobbyStream = _audio.Stop(_lobbyStream);
+ LobbyStream = _audio.Stop(LobbyStream);
}
}
// Update still runs in lobby so just ignore it.
if (_state.CurrentState is not GameplayState)
{
- FadeOut(_ambientMusicStream);
+ Audio.Stop(_ambientMusicStream);
_ambientMusicStream = null;
_musicProto = null;
return;
using Content.Shared.Audio;
using Content.Shared.CCVar;
+using Content.Shared.GameTicking;
using Robust.Client.GameObjects;
using Robust.Shared;
using Robust.Shared.Audio;
base.Initialize();
UpdatesOutsidePrediction = true;
InitializeAmbientMusic();
+ SubscribeNetworkEvent<RoundRestartCleanupEvent>(OnRoundCleanup);
+ }
+
+ private void OnRoundCleanup(RoundRestartCleanupEvent ev)
+ {
+ _fadingOut.Clear();
+
+ // Preserve lobby music but everything else should get dumped.
+ var lobbyStream = EntityManager.System<BackgroundAudioSystem>().LobbyStream;
+ TryComp(lobbyStream, out AudioComponent? audioComp);
+ var oldGain = audioComp?.Gain;
+
+ SilenceAudio();
+
+ if (oldGain != null)
+ {
+ Audio.SetGain(lobbyStream, oldGain.Value, audioComp);
+ }
}
public override void Shutdown()
using Content.Server.GameTicking.Events;
using Content.Shared.Audio;
+using Content.Shared.GameTicking;
using Robust.Server.Audio;
using Robust.Shared.Audio;
+using Robust.Shared.Audio.Components;
using Robust.Shared.Prototypes;
namespace Content.Server.Audio;
public override void Initialize()
{
base.Initialize();
+ SubscribeLocalEvent<RoundRestartCleanupEvent>(OnRoundCleanup);
SubscribeLocalEvent<RoundStartingEvent>(OnRoundStart);
_protoManager.PrototypesReloaded += OnProtoReload;
}
+ private void OnRoundCleanup(RoundRestartCleanupEvent ev)
+ {
+ SilenceAudio();
+ }
+
private void OnProtoReload(PrototypesReloadedEventArgs obj)
{
if (!obj.ByType.ContainsKey(typeof(AudioPresetPrototype)))
using Content.Shared.Physics;
using Robust.Shared.Audio;
+using Robust.Shared.Audio.Components;
using Robust.Shared.Audio.Systems;
namespace Content.Shared.Audio;
base.Initialize();
Audio.OcclusionCollisionMask = (int) CollisionGroup.Impassable;
}
+
+ protected void SilenceAudio()
+ {
+ var query = AllEntityQuery<AudioComponent>();
+
+ while (query.MoveNext(out var uid, out var comp))
+ {
+ Audio.SetGain(uid, 0f, comp);
+ }
+ }
}