private static HashSet <pAvailableEnemyTypes> GetValidGroups(Dictionary <int, float> enemies)
        {
            List <pAvailableEnemyTypes> valid = new List <pAvailableEnemyTypes>();

            foreach (pAvailableEnemyTypes type in EnemyPopData.GetAvailableSpawnData())
            {
                // ToDo Check validity with EnemyGroupDataBlock
                if (enemies.ContainsKey((int)type.enemyID))
                {
                    valid.Add(type);
                }
            }

            List <pAvailableEnemyTypes> trueValid = new List <pAvailableEnemyTypes>();

            EnsureGroupsOnlyContainValidIDS(enemies, valid, trueValid);
            CheckValidity(enemies, trueValid);

            return(new HashSet <pAvailableEnemyTypes>(trueValid));
        }
        private static void EnsureGroupsOnlyContainValidIDS(Dictionary <int, float> enemies, List <pAvailableEnemyTypes> valid, List <pAvailableEnemyTypes> trueValid)
        {
            foreach (pAvailableEnemyTypes validType in valid)
            {
                HashSet <Tuple <eEnemyRole, eEnemyRoleDifficulty> > invalidGroups = new HashSet <Tuple <eEnemyRole, eEnemyRoleDifficulty> >();

                foreach (pAvailableEnemyTypes type in EnemyPopData.GetAvailableSpawnData())
                {
                    if (type.role == validType.role && type.difficulty == validType.difficulty)
                    {
                        if (!enemies.ContainsKey((int)type.enemyID))
                        {
                            invalidGroups.Add(new Tuple <eEnemyRole, eEnemyRoleDifficulty>(type.role, type.difficulty));
                        }
                    }
                }

                bool isValid = true;
                foreach (Tuple <eEnemyRole, eEnemyRoleDifficulty> invalidGroup in invalidGroups)
                {
                    if (validType.role == invalidGroup.Item1 && validType.difficulty == invalidGroup.Item2)
                    {
                        isValid = false;
                        if (!isValid)
                        {
                            break;
                        }
                    }
                }

                if (isValid)
                {
                    trueValid.Add(validType);
                }
            }
        }