shuffle music (Author: alzeih)

This commit is contained in:
Paul Chote
2010-09-10 20:59:03 +12:00
parent aa832244fb
commit f645049054
2 changed files with 22 additions and 21 deletions

View File

@@ -48,6 +48,7 @@ namespace OpenRA.GameRules
public float SoundVolume = 0.5f; public float SoundVolume = 0.5f;
public float MusicVolume = 0.5f; public float MusicVolume = 0.5f;
public float VideoVolume = 0.5f; public float VideoVolume = 0.5f;
public bool Shuffle = false;
} }
public class PlayerSettings public class PlayerSettings

View File

@@ -74,6 +74,14 @@ namespace OpenRA.Widgets.Delegates
return bg.GetWidget("BUTTON_PLAY").OnMouseUp(mi); return bg.GetWidget("BUTTON_PLAY").OnMouseUp(mi);
}; };
var shuffle = bg.GetWidget<CheckboxWidget>("SHUFFLE");
shuffle.OnMouseDown = mi =>
{
Game.Settings.Sound.Shuffle ^= true;
return true;
};
shuffle.Checked = () => Game.Settings.Sound.Shuffle;
bg.GetWidget<LabelWidget>("TIME").GetText = () => bg.GetWidget<LabelWidget>("TIME").GetText = () =>
{ {
if (CurrentSong == null) if (CurrentSong == null)
@@ -118,35 +126,27 @@ namespace OpenRA.Widgets.Delegates
string GetNextSong() string GetNextSong()
{ {
var songs = Rules.Music.Select(a => a.Key) var songs = Rules.Music.Where(a => a.Value.Exists)
.Where(a => FileSystem.Exists(Rules.Music[a].Filename)); .Select(a => a.Key);
var nextSong = songs if (Game.Settings.Sound.Shuffle)
.SkipWhile(m => m != CurrentSong) return songs.Random(Game.CosmeticRandom);
.Skip(1)
.FirstOrDefault();
if (nextSong == null) return songs.SkipWhile(m => m != CurrentSong)
nextSong = songs.FirstOrDefault(); .Skip(1).FirstOrDefault() ?? songs.FirstOrDefault();
return nextSong;
} }
string GetPrevSong() string GetPrevSong()
{ {
var songs = Rules.Music.Select(a => a.Key) var songs = Rules.Music.Where(a => a.Value.Exists)
.Where(a => FileSystem.Exists(Rules.Music[a].Filename)) .Select(a => a.Key).Reverse();
.Reverse();
var nextSong = songs if (Game.Settings.Sound.Shuffle)
.SkipWhile(m => m != CurrentSong) return songs.Random(Game.CosmeticRandom);
.Skip(1)
.FirstOrDefault();
if (nextSong == null) return songs.SkipWhile(m => m != CurrentSong)
nextSong = songs.FirstOrDefault(); .Skip(1).FirstOrDefault() ?? songs.FirstOrDefault();
return nextSong;
} }
} }
} }