Beispiel #1
0
        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;
        }