From f64504905434c81499179ee919c5c2a3886802c0 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 10 Sep 2010 20:59:03 +1200 Subject: [PATCH] shuffle music (Author: alzeih) --- OpenRA.Game/GameRules/Settings.cs | 1 + .../Widgets/Delegates/MusicPlayerDelegate.cs | 42 +++++++++---------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/OpenRA.Game/GameRules/Settings.cs b/OpenRA.Game/GameRules/Settings.cs index 8eab776a6b..753ceaefca 100755 --- a/OpenRA.Game/GameRules/Settings.cs +++ b/OpenRA.Game/GameRules/Settings.cs @@ -48,6 +48,7 @@ namespace OpenRA.GameRules public float SoundVolume = 0.5f; public float MusicVolume = 0.5f; public float VideoVolume = 0.5f; + public bool Shuffle = false; } public class PlayerSettings diff --git a/OpenRA.Game/Widgets/Delegates/MusicPlayerDelegate.cs b/OpenRA.Game/Widgets/Delegates/MusicPlayerDelegate.cs index 1e616bb203..1962a7d9da 100644 --- a/OpenRA.Game/Widgets/Delegates/MusicPlayerDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/MusicPlayerDelegate.cs @@ -74,6 +74,14 @@ namespace OpenRA.Widgets.Delegates return bg.GetWidget("BUTTON_PLAY").OnMouseUp(mi); }; + var shuffle = bg.GetWidget("SHUFFLE"); + shuffle.OnMouseDown = mi => + { + Game.Settings.Sound.Shuffle ^= true; + return true; + }; + shuffle.Checked = () => Game.Settings.Sound.Shuffle; + bg.GetWidget("TIME").GetText = () => { if (CurrentSong == null) @@ -118,35 +126,27 @@ namespace OpenRA.Widgets.Delegates string GetNextSong() { - var songs = Rules.Music.Select(a => a.Key) - .Where(a => FileSystem.Exists(Rules.Music[a].Filename)); + var songs = Rules.Music.Where(a => a.Value.Exists) + .Select(a => a.Key); - var nextSong = songs - .SkipWhile(m => m != CurrentSong) - .Skip(1) - .FirstOrDefault(); + if (Game.Settings.Sound.Shuffle) + return songs.Random(Game.CosmeticRandom); - if (nextSong == null) - nextSong = songs.FirstOrDefault(); - - return nextSong; + return songs.SkipWhile(m => m != CurrentSong) + .Skip(1).FirstOrDefault() ?? songs.FirstOrDefault(); + } string GetPrevSong() { - var songs = Rules.Music.Select(a => a.Key) - .Where(a => FileSystem.Exists(Rules.Music[a].Filename)) - .Reverse(); + var songs = Rules.Music.Where(a => a.Value.Exists) + .Select(a => a.Key).Reverse(); - var nextSong = songs - .SkipWhile(m => m != CurrentSong) - .Skip(1) - .FirstOrDefault(); + if (Game.Settings.Sound.Shuffle) + return songs.Random(Game.CosmeticRandom); - if (nextSong == null) - nextSong = songs.FirstOrDefault(); - - return nextSong; + return songs.SkipWhile(m => m != CurrentSong) + .Skip(1).FirstOrDefault() ?? songs.FirstOrDefault(); } } }