Exemple #1
0
 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);
         }
     }
 }
Exemple #2
0
        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]));