示例#1
0
        public async Task GenerateSchedule_AlreadyHasSets_ClearsOldSets()
        {
            var(season, participants) = SeasonUtility.CreateSeason(dbContext, 2);

            var oldSet = SetUtility.Create(dbContext, participants[0].ID, participants[1].ID, season.LeagueID);

            season.Sets = new HashSet <Set> {
                oldSet
            };

            var newSet = new Set {
                LeagueID  = season.LeagueID,
                SeasonID  = season.ID,
                DueDate   = DateTime.Now.AddDays(1),
                Player1ID = participants[0].ID,
                Player2ID = participants[1].ID,
            };

            testObj.generatedSets = new HashSet <Set> {
                newSet
            };

            await testObj.GenerateScheduleAsync(season, dbContext);

            Assert.AreEqual(1, season.Sets.Count);
        }
示例#2
0
        public static float GetCurrentWinterMovementDifficultyOffset(int tile, VehicleDef vehicleDef, int?ticksAbs = null, StringBuilder explanation = null)
        {
            if (ticksAbs == null)
            {
                ticksAbs = new int?(GenTicks.TicksAbs);
            }
            Vector2 vector = Find.WorldGrid.LongLatOf(tile);

            SeasonUtility.GetSeason(GenDate.YearPercent(ticksAbs.Value, vector.x), vector.y, out float num, out float num2, out float num3, out float num4, out float num5, out float num6);
            float num7 = num4 + num6;

            num7 *= Mathf.InverseLerp(MaxTempForWinterOffset, 0f, GenTemperature.GetTemperatureFromSeasonAtTile(ticksAbs.Value, tile));
            if (num7 > 0.01f)
            {
                float num8 = WinterMovementDifficultyOffset * num7;
                if (explanation != null)
                {
                    explanation.AppendLine();
                    explanation.Append("Winter".Translate());
                    if (num7 < 0.999f)
                    {
                        explanation.Append(" (" + num7.ToStringPercent("F0") + ")");
                    }
                    explanation.Append(": ");
                    explanation.Append(num8.ToStringWithSign("0.#"));                     //REDO - Add translated text for winter path cost multiplier
                }
                return(num8 * vehicleDef.properties.winterPathCostMultiplier);
            }
            return(0f);
        }
示例#3
0
        public async Task UpdateStandings_Ties_NoTiedStandings(params int[] seasonPoints)
        {
            MockTieBreak(arg =>
            {
                var points = 1;
                foreach (var entry in arg)
                {
                    entry.Key.TieBreakerPoints = points;
                    ++points;
                }
            });

            var season = SeasonUtility.CreateSeason(dbContext, 4).season;

            dbContext.UpdateRange(season.Participants);
            for (int i = 0; i < seasonPoints.Length; i++)
            {
                season.Participants[i].Points = seasonPoints[i];
            }
            dbContext.SaveChanges();

            var set = SetUtility.Create(dbContext, season.Participants[0], season.Participants[1], season.LeagueID);

            await testObj.UpdateStandings(set.ID);

            season.Participants.Sort();
            for (var i = 0; i < season.Participants.Count; i++)
            {
                Assert.AreEqual(4 - i, season.Participants[i].Standing);
            }
        }
示例#4
0
        public static int CalculatedCostAt(int tile, bool perceivedStatic, float yearPercent = -1f)
        {
            int  num   = 0;
            Tile tile2 = Find.WorldGrid[tile];

            if (tile2.biome.impassable)
            {
                return(1000000);
            }
            if (yearPercent < 0.0)
            {
                yearPercent = (float)((float)WorldPathGrid.DayOfYearAt0Long / 60.0);
            }
            float   yearPct = yearPercent;
            Vector2 vector  = Find.WorldGrid.LongLatOf(tile);
            float   num2    = default(float);
            float   num3    = default(float);
            float   num4    = default(float);
            float   num5    = default(float);
            float   num6    = default(float);
            float   num7    = default(float);

            SeasonUtility.GetSeason(yearPct, vector.y, out num2, out num3, out num4, out num5, out num6, out num7);
            num += Mathf.RoundToInt((float)tile2.biome.pathCost_spring * num2 + (float)tile2.biome.pathCost_summer * num3 + (float)tile2.biome.pathCost_fall * num4 + (float)tile2.biome.pathCost_winter * num5 + (float)tile2.biome.pathCost_summer * num6 + (float)tile2.biome.pathCost_winter * num7);
            if (tile2.hilliness == Hilliness.Impassable)
            {
                return(1000000);
            }
            return(num + WorldPathGrid.CostFromTileHilliness(tile2.hilliness));
        }
        public static bool GetReportedSeason(ref Season __result, float yearPct, float latitude)
        {
            int year1000 = (int)(yearPct * 1000f);

            if (!yearLatitudeSeason.TryGetValue(year1000, out Dictionary <float, Season> latitudeSeason))
            {
                latitudeSeason = new Dictionary <float, Season>();
                yearLatitudeSeason.Add(year1000, latitudeSeason);
            }
            if (!latitudeSeason.TryGetValue(latitude, out Season season))
            {
                SeasonUtility.GetSeason(yearPct, latitude, out float spring, out float summer, out float fall, out float winter, out float permanentSummer, out float permanentWinter);
                if (permanentSummer == 1f)
                {
                    season = Season.PermanentSummer;
                }

                if (permanentWinter == 1f)
                {
                    season = Season.PermanentWinter;
                }
                if (permanentSummer != 1f && permanentWinter != 1f)
                {
                    season = GenMath.MaxBy(Season.Spring, spring, Season.Summer, summer, Season.Fall, fall, Season.Winter, winter);
                }
                latitudeSeason.Add(latitude, season);
            }
            __result = season;
            return(false);
        }
示例#6
0
        public static float GetCurrentWinterMovementDifficultyOffset(int tile, int?ticksAbs = null, StringBuilder explanation = null)
        {
            if (!ticksAbs.HasValue)
            {
                ticksAbs = GenTicks.TicksAbs;
            }
            Vector2 vector = Find.WorldGrid.LongLatOf(tile);

            SeasonUtility.GetSeason(GenDate.YearPercent(ticksAbs.Value, vector.x), vector.y, out var _, out var _, out var _, out var winter, out var _, out var permanentWinter);
            float num = winter + permanentWinter;

            num *= Mathf.InverseLerp(5f, 0f, GenTemperature.GetTemperatureFromSeasonAtTile(ticksAbs.Value, tile));
            if (num > 0.01f)
            {
                float num2 = 2f * num;
                if (explanation != null)
                {
                    explanation.AppendLine();
                    explanation.Append("Winter".Translate());
                    if (num < 0.999f)
                    {
                        explanation.Append(" (" + num.ToStringPercent("F0") + ")");
                    }
                    explanation.Append(": ");
                    explanation.Append(num2.ToStringWithSign("0.#"));
                }
                return(num2);
            }
            return(0f);
        }
示例#7
0
        public async Task Start_Valid_Created()
        {
            var season = SeasonUtility.CreateSeason(dbContext, 2).season;

            var result = await testObj.Start(season.ID);

            ControllerUtility.AssertStatusCode(result, HttpStatusCode.Created);
        }
示例#8
0
        public void DebugLogTemps()
        {
            StringBuilder stringBuilder = new StringBuilder();
            float         num;

            if (Find.CurrentMap != null)
            {
                Vector2 vector = Find.WorldGrid.LongLatOf(Find.CurrentMap.Tile);
                num = vector.y;
            }
            else
            {
                num = 0f;
            }
            float num2 = num;

            stringBuilder.AppendLine("Latitude " + num2);
            stringBuilder.AppendLine("-----Temperature for each hour this day------");
            stringBuilder.AppendLine("Hour    Temp    SunEffect");
            int num3 = Find.TickManager.TicksAbs - Find.TickManager.TicksAbs % 60000;

            for (int i = 0; i < 24; i++)
            {
                int absTick = num3 + i * 2500;
                stringBuilder.Append(i.ToString().PadRight(5));
                stringBuilder.Append(Find.World.tileTemperatures.OutdoorTemperatureAt(map.Tile, absTick).ToString("F2").PadRight(8));
                stringBuilder.Append(GenTemperature.OffsetFromSunCycle(absTick, map.Tile).ToString("F2"));
                stringBuilder.AppendLine();
            }
            stringBuilder.AppendLine();
            stringBuilder.AppendLine("-----Temperature for each twelfth this year------");
            for (int j = 0; j < 12; j++)
            {
                Twelfth twelfth = (Twelfth)j;
                float   num4    = Find.World.tileTemperatures.AverageTemperatureForTwelfth(map.Tile, twelfth);
                stringBuilder.AppendLine(twelfth.GetQuadrum() + "/" + SeasonUtility.GetReportedSeason(twelfth.GetMiddleYearPct(), num2) + " - " + twelfth.ToString() + " " + num4.ToString("F2"));
            }
            stringBuilder.AppendLine();
            stringBuilder.AppendLine("-----Temperature for each day this year------");
            stringBuilder.AppendLine("Tile avg: " + map.TileInfo.temperature + "°C");
            stringBuilder.AppendLine("Seasonal shift: " + GenTemperature.SeasonalShiftAmplitudeAt(map.Tile));
            stringBuilder.AppendLine("Equatorial distance: " + Find.WorldGrid.DistanceFromEquatorNormalized(map.Tile));
            stringBuilder.AppendLine();
            stringBuilder.AppendLine("Day  Lo   Hi   OffsetFromSeason RandomDailyVariation");
            for (int k = 0; k < 60; k++)
            {
                int absTick2 = (int)((float)(k * 60000) + 15000f);
                int absTick3 = (int)((float)(k * 60000) + 45000f);
                stringBuilder.Append(k.ToString().PadRight(8));
                stringBuilder.Append(Find.World.tileTemperatures.OutdoorTemperatureAt(map.Tile, absTick2).ToString("F2").PadRight(11));
                stringBuilder.Append(Find.World.tileTemperatures.OutdoorTemperatureAt(map.Tile, absTick3).ToString("F2").PadRight(11));
                stringBuilder.Append(GenTemperature.OffsetFromSeasonCycle(absTick3, map.Tile).ToString("F2").PadRight(11));
                stringBuilder.Append(Find.World.tileTemperatures.OffsetFromDailyRandomVariation(map.Tile, absTick3).ToString("F2"));
                stringBuilder.AppendLine();
            }
            Log.Message(stringBuilder.ToString());
        }
示例#9
0
        public void GenerateSchedule_NotEnoughParticipants_Exception(int userCount)
        {
            var league = LeagueUtility.CreateLeague(dbContext);

            LeagueUtility.AddUsersToLeague(league, userCount, dbContext);
            var season = SeasonUtility.CreateSeason(dbContext, userCount).season;

            Assert.ThrowsAsync <InvalidOperationException>(() => testObj.GenerateScheduleAsync(season, dbContext));
        }
示例#10
0
        public async Task GenerateSchedule_Valid_CreateSets(int userCount, int setCount)
        {
            var season = SeasonUtility.CreateSeason(dbContext, userCount).season;

            season.Sets = new HashSet <Set>();

            await testObj.GenerateScheduleAsync(season, dbContext);

            Assert.AreEqual(setCount, season.Sets.Count);
        }
示例#11
0
        public async Task Start_SeasonExists_SeasonIsActive()
        {
            var season = SeasonUtility.CreateSeason(dbContext, 2).season;

            seasonService.GenerateSchedule(season.ID).Returns(season);

            await testObj.Start(season.ID);

            Assert.IsTrue(season.IsActive);
        }
示例#12
0
        public async Task Participants_Valid_Ok(int participantsCount)
        {
            var season = SeasonUtility.CreateSeason(dbContext, participantsCount).season;

            var result = await testObj.Participants(season.ID);

            var resultObj = result.GetObject <IEnumerable <LeagueUser> >();

            ControllerUtility.AssertStatusCode(result, HttpStatusCode.OK);
            Assert.AreEqual(participantsCount, resultObj.Count());
        }
示例#13
0
        public async Task Sets_NoSets_Ok()
        {
            var season = SeasonUtility.CreateSeason(dbContext, 2).season;

            var result = await testObj.Sets(season.ID);

            var resultObj = result.GetObject <IEnumerable <Set> >();

            ControllerUtility.AssertStatusCode(result, HttpStatusCode.OK);
            Assert.IsNotNull(resultObj);
        }
示例#14
0
        public async Task Get_Valid_Ok()
        {
            var season = SeasonUtility.CreateSeason(dbContext, 2).season;

            var result = await testObj.Get(season.ID);

            var resultObj = result.GetObject <Season>();

            ControllerUtility.AssertStatusCode(result, HttpStatusCode.OK);
            Assert.IsNotNull(resultObj.Participants);
        }
示例#15
0
        public async Task Sets_HasSets_Ok()
        {
            var season = SeasonUtility.CreateSeason(dbContext, 2).season;
            var sets   = SeasonUtility.CreateSets(dbContext, season);

            var result = await testObj.Sets(season.ID);

            var resultObj = result.GetObject <HashSet <Set> >();

            ControllerUtility.AssertStatusCode(result, HttpStatusCode.OK);
            Assert.AreEqual(sets.Count, resultObj.Count);
        }
示例#16
0
        internal static void Postfix(ref float __result, Map ___map, ThingDef plant)
        {
            if (!plant.HasModExtension <DM_ModExtension>())
            {
                return;
            }
            DM_ModExtension ext = plant.GetModExtension <DM_ModExtension>();

            if (SeasonUtility.GetPreviousSeason(ext.season) == GenLocalDate.Season(___map) && ext.spawnInPreviousSeason)
            {
                __result = (ext.commonality / 2);
                return;
            }
            __result = ext.commonality;
        }
示例#17
0
        public async Task GenerateSchedule_Valid_EveryoneFightsEveryone(int userCount)
        {
            var season = SeasonUtility.CreateSeason(dbContext, userCount).season;

            season.Sets = new HashSet <Set>();

            await testObj.GenerateScheduleAsync(season, dbContext);

            Assert.IsTrue(season.Participants.All(slu =>
            {
                var fightCount = season.Sets.Where(s => s
                                                   .IsPlaying(slu.LeagueUserID))
                                 .Select(s => s.GetOpponentID(slu.LeagueUserID))
                                 .Distinct()
                                 .Count();
                return(fightCount == userCount - 1);
            }));
        }
示例#18
0
        internal static void Postfix(IntVec3 c, Map ___map, List <ThingDef> outPlants)
        {
            List <ThingDef> thingDefs = DefDatabase <ThingDef> .AllDefsListForReading;

            foreach (ThingDef thingDef in thingDefs.Where(x => x.HasModExtension <DM_ModExtension>()))
            {
                outPlants.Remove(thingDef);
                DM_ModExtension ext = thingDef.GetModExtension <DM_ModExtension>();
                if (!thingDef.CanEverPlantAt_NewTemp(c, ___map))
                {
                    return;
                }
                if (GenLocalDate.Season(___map) == ext.season || (SeasonUtility.GetPreviousSeason(ext.season) == GenLocalDate.Season(___map) && ext.spawnInPreviousSeason) || (DMSeasonUtility.GetNextSeason(ext.season) == GenLocalDate.Season(___map) && ext.spawnInNextSeason))
                {
                    outPlants.Add(thingDef);
                }
            }
        }
        public static float GetCurrentWinterMovementDifficultyOffset(int tile, int?ticksAbs = null, StringBuilder explanation = null)
        {
            if (ticksAbs == null)
            {
                ticksAbs = new int?(GenTicks.TicksAbs);
            }
            Vector2 vector  = Find.WorldGrid.LongLatOf(tile);
            float   yearPct = GenDate.YearPercent((long)ticksAbs.Value, vector.x);
            float   num;
            float   num2;
            float   num3;
            float   num4;
            float   num5;
            float   num6;

            SeasonUtility.GetSeason(yearPct, vector.y, out num, out num2, out num3, out num4, out num5, out num6);
            float num7 = num4 + num6;

            num7 *= Mathf.InverseLerp(5f, 0f, GenTemperature.GetTemperatureFromSeasonAtTile(ticksAbs.Value, tile));
            float result;

            if (num7 > 0.01f)
            {
                float num8 = 2f * num7;
                if (explanation != null)
                {
                    explanation.AppendLine();
                    explanation.Append("Winter".Translate());
                    if (num7 < 0.999f)
                    {
                        explanation.Append(" (" + num7.ToStringPercent("F0") + ")");
                    }
                    explanation.Append(": ");
                    explanation.Append(num8.ToStringWithSign("0.#"));
                }
                result = num8;
            }
            else
            {
                result = 0f;
            }
            return(result);
        }