public static void play(MediaPlayer player, SoundType type = SoundType.SoundEffect, SoundLoop loop = SoundLoop.None) { SoundConfiguration configuration = new SoundConfiguration(type, loop); currentMediaPlayers[player] = configuration; switch (type) { //todo make music transition flow correctly case SoundType.BattleMusic: player.Volume = PlayBattleTheme ? MusicVolume : 0; break; case SoundType.MenuMusic: player.Volume = PlayBattleTheme ? 0 : MusicVolume; break; case SoundType.SoundEffect: player.Volume = SoundVolume; break; } player.MediaEnded += on_player_end; player.Play(); }
private static void on_player_end(object sender, EventArgs e) { MediaPlayer player = (MediaPlayer)sender; if (!currentMediaPlayers.ContainsKey(player)) { return; } SoundConfiguration configuration = currentMediaPlayers[player]; if (configuration.Loop == SoundLoop.Loop) { player.Position = TimeSpan.FromMilliseconds(1); player.Play(); } else { currentMediaPlayers.TryRemove(player, out configuration); } }