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); } } }