/// <summary>
        /// Passe au niveau suivant. Recrée les étapes du niveaux, rénitialise le composant d'interface, et sauvegarde
        /// les statistiques des joueurs, en effaçant leurs effets temporaires.
        /// Si des powerups sont crées, attend qu'ils soient consommés pour passer au niveau suivant.
        /// </summary>
        /// <param name="createPowerups"> Indique si un SpellPowerup par joueur est crée </param>
        private void NextLevel(bool createPowerups)
        {
            InitialScore = Score;

            ++Level;
            _levelHasBegun = false;
            _levelObserver = null;
            _levelScript   = new LevelScript[_players.Count];
            for (var i = 0; i < _players.Count; ++i)
            {
                _levelScript[i] = new LevelScript();
            }
            var steps = new List <LevelStep> [2];

            for (var i = 0; i < _players.Count; ++i)
            {
                steps[i] = LevelSteps.CreateSteps(Map.Gateways);
            }
            for (var i = 0; i < _players.Count; ++i)
            {
                foreach (var step in steps[i])
                {
                    _levelScript[i].AddStep(step);
                }
            }

            // Création des powerups
            if (createPowerups)
            {
                for (var i = 0; i < _players.Count; ++i)
                {
                    var powerups = Powerups.SpellPowerups();
                    Powerup.Create(Map.BossSpawn + new Point(_spellPowerups * 100 - 50, 0),
                                   powerups[Random.Next(powerups.Count)]);
                    ++_spellPowerups;
                }
            }
        }
 /// <summary>
 /// Retourne un composant de l'interface ayant accès aux données du niveau en train de se dérouler.
 /// </summary>
 /// <param name="position"> La position du composant </param>
 /// <returns> Le composant de l'interface </returns>
 public LevelObserver GetLevelObserver(Point position)
 {
     return(_levelObserver ?? (_levelObserver = new LevelObserver(position, _levelScript[0])));
 }