public override void GeneratePossibleEnemies(ProceduralLevel level)
        {
            float maxEnemyDifficulty = m_MaximumEnemyDifficulty.Evaluate(level.Difficulty);

            Enemy[]      enemies         = ObjectsManager.GetAllObjects <Enemy>();
            List <Enemy> possibleEnemies = new List <Enemy>();

            foreach (Enemy enemy in enemies)
            {
                if (!enemy.IsSpawnable)
                {
                    continue;
                }
                if (enemy.Difficulty > maxEnemyDifficulty)
                {
                    continue;
                }
                possibleEnemies.Add(enemy);
            }
            if (possibleEnemies.Count == 0)
            {
                return;
            }

            possibleEnemies.Sort((a, b) => { return(a.Difficulty < b.Difficulty ? 1 : -1); });

            List <Enemy> selectedEnemies       = new List <Enemy>();
            float        chanceForSelection    = 0.8f;
            float        reductionPerSelection = 0.75f;

            foreach (Enemy enemy in possibleEnemies)
            {
                if (Random.Range(0.0f, 1.0f) <= chanceForSelection)
                {
                    selectedEnemies.Add(enemy);
                    chanceForSelection *= reductionPerSelection;
                }
            }

            if (selectedEnemies.Count == 0)
            {
                selectedEnemies.Add(possibleEnemies[0]);
            }

            level.PossibleEnemies = selectedEnemies.ToArray();
        }