using System; using System.Collections.Generic; using OpenRA.FileFormats; namespace OpenRA.GameRules { public class MusicInfo { public readonly Lazy> Pools; public readonly string[] Music = { }; public MusicInfo( MiniYaml y ) { FieldLoader.Load(this, y); Pools = Lazy.New(() => new Dictionary { { "Music", new MusicPool(Music) }, }); } } public class MusicPool { readonly string[] clips; readonly List liveclips = new List(); public MusicPool(params string[] clips) { this.clips = clips; } public string GetNext() { if (liveclips.Count == 0) liveclips.AddRange(clips); if (liveclips.Count == 0) return null; /* avoid crashing if there's no clips at all */ var i = Game.CosmeticRandom.Next(liveclips.Count); var s = liveclips[i]; liveclips.RemoveAt(i); return s; } } }