Root/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2016 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System; using System.Collections.Generic; #endregion namespace Microsoft.Xna.Framework.Media { public sealed class MediaQueue { #region Public Properties public Song ActiveSong { get { if (songs.Count == 0 || ActiveSongIndex < 0) { return null ; } return songs[ActiveSongIndex]; } } public int ActiveSongIndex { get ; set ; } public int Count { get { return songs.Count; } } public Song this [ int index] { get { return songs[index]; } } #endregion #region Internal Properties internal IEnumerable<Song> Songs { get { return songs; } } internal Song GetNextSong( int direction, bool shuffle) { if (shuffle) { ActiveSongIndex = random.Next(songs.Count); } else { ActiveSongIndex = ( int ) MathHelper.Clamp( ActiveSongIndex + direction, 0, songs.Count - 1 ); } return songs[ActiveSongIndex]; } #endregion #region Private Variables private List<Song> songs = new List<Song>(); private Random random = new Random(); #endregion #region Public Constructor public MediaQueue() { ActiveSongIndex = -1; } #endregion #region Internal Methods internal void Add(Song song) { songs.Add(song); } internal void Clear() { Song song; while (songs.Count > 0) { song = songs[0]; song.Stop(); songs.Remove(song); } } internal void SetVolume( float volume) { int count = songs.Count; for ( int i = 0; i < count; i += 1) { songs[i].Volume = volume; } } internal void Stop() { int count = songs.Count; for ( int i = 0; i < count; i += 1) { songs[i].Stop(); } } #endregion } } |