]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Lobby Audio from static to CVar (#38375)
authorbeesterman <72782957+beesterman@users.noreply.github.com>
Wed, 25 Jun 2025 02:22:28 +0000 (21:22 -0500)
committerGitHub <noreply@github.com>
Wed, 25 Jun 2025 02:22:28 +0000 (04:22 +0200)
* Changed LobbyMusiccollection over to a Cvar and edited ContentAudioSystem.cs to use Cvar Values

* Addedd Ability to modify the lobbyMusiccollection from the command line

* Fixed changing lobby music while in the round

* Deleted uneeded duplicate line

* Removed additional duplicate lobbyplaylist line

* Alphabatized imports and refactored to use Subs.CVar

* Added error checking and default behaviour to CVar sub.

* Refactored to use TryIndex and Allowed for a empty soundcollection when a sound collection is not found. Edited Cvar comment to reflect changes.

* Made _lobbyMusicCollection nullable and addedd handling for null case where used. Also Changed LobbyMusicCollection Cvar over to audio rather than ambience.

* Update Content.Server/Audio/ContentAudioSystem.cs

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
Content.Server/Audio/ContentAudioSystem.cs
Content.Shared/CCVar/CCVars.Audio.cs

index f36d14cbaf037f631cc4b90c360513d942b47bfc..88ef49c1b649ed7534b7c815724aced19374aeb2 100644 (file)
@@ -3,32 +3,52 @@ using Content.Server.GameTicking;
 using Content.Server.GameTicking.Events;
 using Content.Shared.Audio;
 using Content.Shared.Audio.Events;
+using Content.Shared.CCVar;
 using Content.Shared.GameTicking;
 using Robust.Server.Audio;
 using Robust.Shared.Audio;
+using Robust.Shared.Configuration;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Random;
 
+
 namespace Content.Server.Audio;
 
 public sealed class ContentAudioSystem : SharedContentAudioSystem
 {
-    [ValidatePrototypeId<SoundCollectionPrototype>]
-    private const string LobbyMusicCollection = "LobbyMusic";
-
     [Dependency] private readonly AudioSystem _serverAudio = default!;
     [Dependency] private readonly IRobustRandom _robustRandom = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+    [Dependency] private readonly IConfigurationManager _cfg = default!;
 
-    private SoundCollectionPrototype _lobbyMusicCollection = default!;
+    private SoundCollectionPrototype? _lobbyMusicCollection = default!;
     private string[]? _lobbyPlaylist;
 
     public override void Initialize()
     {
         base.Initialize();
 
-        _lobbyMusicCollection = _prototypeManager.Index<SoundCollectionPrototype>(LobbyMusicCollection);
-        _lobbyPlaylist = ShuffleLobbyPlaylist();
+        //changes the music collection and reshuffles the playlist to update the lobby music
+        Subs.CVar(
+            _cfg,
+            CCVars.LobbyMusicCollection,
+            x =>
+            {
+                //Checks to see if the sound collection exists. If it does change it if not defaults to null
+                // as the new _lobbyMusicCollection meaning it wont play anything in the lobby.
+                if(_prototypeManager.TryIndex<SoundCollectionPrototype>(x, out var outputSoundCollection))
+                {
+                    _lobbyMusicCollection = outputSoundCollection;
+                }
+                else
+                {
+                    Log.Error($"Invalid Lobby Music sound collection specified: {x}");
+                    _lobbyMusicCollection = null;
+                }
+
+                _lobbyPlaylist = ShuffleLobbyPlaylist();
+            },
+            true);
 
         SubscribeLocalEvent<RoundEndMessageEvent>(OnRoundEnd);
         SubscribeLocalEvent<PlayerJoinedLobbyEvent>(OnPlayerJoinedLobby);
@@ -76,11 +96,16 @@ public sealed class ContentAudioSystem : SharedContentAudioSystem
 
     private string[] ShuffleLobbyPlaylist()
     {
+        if (_lobbyMusicCollection == null)
+        {
+            return [];
+        }
+
         var playlist = _lobbyMusicCollection.PickFiles
                                             .Select(x => x.ToString())
                                             .ToArray();
-         _robustRandom.Shuffle(playlist);
+        _robustRandom.Shuffle(playlist);
 
-         return playlist;
+        return playlist;
     }
 }
index 4d9e7c44315ffa6d916c3212136672a1b98fb14b..63e49ef532664e8ac6f3669334ab4b80e5f65f90 100644 (file)
@@ -1,4 +1,6 @@
-using Robust.Shared.Configuration;
+using Content.Shared.Administration;
+using Content.Shared.CCVar.CVarAccess;
+using Robust.Shared.Configuration;
 
 namespace Content.Shared.CCVar;
 
@@ -58,4 +60,10 @@ public sealed partial class CCVars
         public static readonly CVarDef<float> InterfaceVolume =
             CVarDef.Create("audio.interface_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY);
 
+    /// <summary>
+    ///     Lobby music collection string
+    /// </summary>
+    [CVarControl(AdminFlags.VarEdit)]
+    public static readonly CVarDef<string> LobbyMusicCollection =
+        CVarDef.Create("audio.lobby_music_collection", "LobbyMusic", CVar.REPLICATED | CVar.SERVER);
 }