public override IEnumerable <int> GetPossibleSpecies(TGenContext map) { foreach (TeamSpawner teamSpawn in map.TeamSpawns.EnumerateOutcomes()) { SpawnList <MobSpawn> mobsAtFloor = teamSpawn.GetPossibleSpawns(); foreach (MobSpawn mobSpawn in mobsAtFloor.EnumerateOutcomes()) { yield return(mobSpawn.BaseForm.Species); } } }
protected override List <int> GetTypes(BaseMapGenContext map, SpawnList <MobSpawn> specialMobs) { Dictionary <int, int> elementFrequency = new Dictionary <int, int>(); for (int ii = 0; ii < map.TeamSpawns.Count; ii++) { SpawnList <MobSpawn> mobSpawns = map.TeamSpawns.GetSpawn(ii).GetPossibleSpawns(); foreach (MobSpawn spawn in mobSpawns.EnumerateOutcomes()) { MonsterFeatureData featureIndex = DataManager.Instance.UniversalData.Get <MonsterFeatureData>(); FormFeatureSummary baseData = featureIndex.FeatureData[spawn.BaseForm.Species][Math.Max(0, spawn.BaseForm.Form)]; if (baseData.Element1 != 00) { MathUtils.AddToDictionary(elementFrequency, baseData.Element1, 1); } if (baseData.Element2 != 00) { MathUtils.AddToDictionary(elementFrequency, baseData.Element2, 1); } } } if (elementFrequency.Count == 0) { for (int ii = 0; ii < specialMobs.Count; ii++) { MobSpawn spawn = specialMobs.GetSpawn(ii); MonsterFeatureData featureIndex = DataManager.Instance.UniversalData.Get <MonsterFeatureData>(); FormFeatureSummary baseData = featureIndex.FeatureData[spawn.BaseForm.Species][Math.Max(0, spawn.BaseForm.Form)]; if (baseData.Element1 != 00) { MathUtils.AddToDictionary(elementFrequency, baseData.Element1, 1); } if (baseData.Element2 != 00) { MathUtils.AddToDictionary(elementFrequency, baseData.Element2, 1); } } } List <int> result = new List <int>(); if (elementFrequency.Count > 0) { //choose randomly from the top 3 types List <(int, int)> elements = new List <(int, int)>(); foreach (int key in elementFrequency.Keys) { elements.Add((key, elementFrequency[key]));