internal static Month GenerateMissionDate(DCSMission mission, MissionTemplateRecord template) { int day; Month month; // Select a random year from the most recent coalition's decade. var year = Toolbox.GetRandomYearFromDecade(template.ContextDecade); BriefingRoom.PrintToLog($"No fixed date provided in the mission template, generating date in decade {template.ContextDecade}"); if (template.EnvironmentSeason == Season.Random) // Random season, pick any day of the year. { month = (Month)Toolbox.RandomInt(12); day = Toolbox.RandomMinMax(1, GeneratorTools.GetDaysPerMonth(month, year)); } else // Pick a date according to the desired season { Month[] seasonMonths = GetMonthsForSeason(template.EnvironmentSeason); int monthIndex = Toolbox.RandomInt(4); month = seasonMonths[monthIndex]; switch (monthIndex) { case 0: // First month of the season, season begins on the 21st day = Toolbox.RandomMinMax(21, GeneratorTools.GetDaysPerMonth(month, year)); break; case 3: // Last month of the season, season ends on the 20th day = Toolbox.RandomMinMax(1, 20); break; default: day = Toolbox.RandomMinMax(1, GeneratorTools.GetDaysPerMonth(month, year)); break; } } mission.SetValue("DateDay", day); mission.SetValue("DateMonth", (int)month + 1); mission.SetValue("DateYear", year); mission.SetValue("BriefingDate", $"{(int)month + 1:00}/{day:00}/{year:0000}"); BriefingRoom.PrintToLog($"Misson date set to {day} {month} {year}."); return(month); }