public static Level FromMetadata(LevelMetadata metadata, ContentManager contentManager) { var backgroundMetadata = contentManager.Load<BackgroundMetadata>(metadata.Background); var level = new Level { Distance = metadata.Distance, Background = BackgroundController.FromMetadata(backgroundMetadata, contentManager), Name = metadata.Name }; level.Melody = contentManager.Load<SoundEffect>(metadata.Melody).CreateInstance(); if (level.Melody != null) { level.Melody.IsLooped = true; level.Melody.Play(); } foreach (var enemy in metadata.Enemies) { var character = EnemyMapper.GetEnemy(enemy.EnemyType, contentManager); character.WorldPosition = enemy.Position; level.AddEnemy(character); } foreach (var obstacle in metadata.Obstacles) { var enemy = EnemyMapper.GetEnemy(obstacle.EnemyType, contentManager); enemy.WorldPosition = obstacle.Position; level.AddEnemy(enemy); } foreach (var bossMetadata in metadata.Bosses) { var boss = EnemyMapper.GetBoss(bossMetadata.EnemyType, contentManager); if (boss != null) { boss.WorldPosition = bossMetadata.Position; level.AddBoss(boss); } } foreach (var message in metadata.Messages) { level.Texts.Add(new LevelText(message.Text, message.Position)); } return level; }