Ejemplo n.º 1
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]));
Ejemplo n.º 2
0
        public static void TestFloor(Stopwatch watch, ZoneSegmentBase structure, ZoneGenContext zoneContext, Dictionary <int, int> generatedItems, Dictionary <int, int> generatedEnemies, List <TimeSpan> generationTimes)
        {
            TimeSpan before = watch.Elapsed;

            watch.Start();
            IGenContext context = structure.GetMap(zoneContext);

            watch.Stop();
            TimeSpan diff = watch.Elapsed - before;

            generationTimes.Add(diff);


            BaseMapGenContext mapContext = context as BaseMapGenContext;

            if (generatedItems != null)
            {
                foreach (MapItem mapItem in mapContext.Map.Items)
                {
                    if (mapItem.IsMoney)
                    {
                        MathUtils.AddToDictionary <int>(generatedItems, -1, mapItem.Value);
                        MathUtils.AddToDictionary <int>(generatedItems, 0, 1);
                    }
                    else
                    {
                        MathUtils.AddToDictionary <int>(generatedItems, mapItem.Value, 1);
                    }
                }
            }
            if (generatedEnemies != null)
            {
                foreach (Team team in mapContext.Map.MapTeams)
                {
                    foreach (Character character in team.Players)
                    {
                        MathUtils.AddToDictionary <int>(generatedEnemies, character.BaseForm.Species, 1);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public static void StressTestStructure(ZoneSegmentBase structure, int zoneIndex, int structureIndex, int amount)
        {
            ExampleDebug.Printing = -1;
            ulong zoneSeed = 0;
            int   floor    = 0;

            try
            {
                List <Dictionary <int, int> > generatedItems   = new List <Dictionary <int, int> >();
                List <Dictionary <int, int> > generatedEnemies = new List <Dictionary <int, int> >();
                List <List <TimeSpan> >       generationTimes  = new List <List <TimeSpan> >();
                for (int ii = 0; ii < structure.FloorCount; ii++)
                {
                    generatedItems.Add(new Dictionary <int, int>());
                    generatedEnemies.Add(new Dictionary <int, int>());
                    generationTimes.Add(new List <TimeSpan>());
                }

                Stopwatch watch = new Stopwatch();

                for (int ii = 0; ii < amount; ii++)
                {
                    zoneSeed = MathUtils.Rand.NextUInt64();

                    ReNoise totalNoise = new ReNoise(zoneSeed);
                    ulong[] doubleSeed = totalNoise.GetTwoUInt64((ulong)structureIndex);
                    INoise  idNoise    = new ReNoise(doubleSeed[1]);

                    ZoneGenContext zoneContext = CreateZoneGenContextSegment(doubleSeed[0], zoneIndex, structureIndex, structure);

                    foreach (int floorId in structure.GetFloorIDs())
                    {
                        floor = floorId;
                        zoneContext.CurrentID = floorId;
                        zoneContext.Seed      = idNoise.GetUInt64((ulong)floorId);

                        TestFloor(watch, structure, zoneContext, generatedItems[floorId], generatedEnemies[floorId], generationTimes[floorId]);
                    }
                }


                Dictionary <int, int> totalGeneratedItems   = new Dictionary <int, int>();
                Dictionary <int, int> totalGeneratedEnemies = new Dictionary <int, int>();
                for (int ii = 0; ii < structure.FloorCount; ii++)
                {
                    DiagManager.Instance.LogInfo("F" + ii + ":");
                    PrintContentAnalysis(generatedItems[ii], generatedEnemies[ii]);

                    foreach (int key in generatedItems[ii].Keys)
                    {
                        MathUtils.AddToDictionary <int>(totalGeneratedItems, key, generatedItems[ii][key]);
                    }

                    foreach (int key in generatedEnemies[ii].Keys)
                    {
                        MathUtils.AddToDictionary <int>(totalGeneratedEnemies, key, generatedEnemies[ii][key]);
                    }
                }

                DiagManager.Instance.LogInfo("Overall:");
                PrintContentAnalysis(totalGeneratedItems, totalGeneratedEnemies);

                PrintTimeAnalysisTier2(generationTimes, "F");
            }
            catch (Exception ex)
            {
                DiagManager.Instance.LogInfo("ERROR at F" + floor + " ZSeed:" + zoneSeed);
                PrintError(ex);
            }
            finally
            {
                ExampleDebug.Printing = 0;
            }
        }