public void Generate(CampaignTemplate campaignTemplate, string campaignFilePath) { string campaignName = Path.GetFileNameWithoutExtension(campaignFilePath); string campaignDirectory = Path.GetDirectoryName(campaignFilePath); DCSMissionDateTime date = GenerateCampaignDate(campaignTemplate); using (MissionGenerator generator = new MissionGenerator()) { for (int i = 0; i < campaignTemplate.MissionsCount; i++) { // Increment the date by a few days for each mission after the first if (i > 0) { IncrementDate(ref date); } MissionTemplate template = CreateMissionTemplate(campaignTemplate, i); DCSMission mission = generator.Generate(template); mission.MissionName = $"{campaignName}, phase {i + 1}"; mission.DateTime.Day = date.Day; mission.DateTime.Month = date.Month; mission.DateTime.Year = date.Year; MizFile miz = mission.ExportToMiz(); miz.SaveToFile(Path.Combine(campaignDirectory, $"{campaignName}{i + 1:00}.miz")); } } CreateImageFiles(campaignTemplate, campaignFilePath); CreateCMPFile(campaignTemplate, campaignFilePath); }
private DCSMissionDateTime GenerateCampaignDate(CampaignTemplate campaignTemplate) { DCSMissionDateTime date = new DCSMissionDateTime { Year = Toolbox.GetRandomYearFromDecade(campaignTemplate.ContextDecade), Month = Toolbox.RandomFrom(Toolbox.GetEnumValues <Month>()) }; date.Day = Toolbox.RandomMinMax(1, Toolbox.GetDaysPerMonth(date.Month, date.Year)); return(date); }
private void IncrementDate(ref DCSMissionDateTime date) { date.Day += Toolbox.RandomMinMax(1, 3); if (date.Day > Toolbox.GetDaysPerMonth(date.Month, date.Year)) { if (date.Month == Month.December) { date.Month = Month.January; date.Year++; } else { date.Month++; } } }
public void Generate(CampaignTemplate campaignTemplate, string campaignFilePath) { string campaignName = Path.GetFileNameWithoutExtension(campaignFilePath); string campaignDirectory = Path.GetDirectoryName(campaignFilePath); DCSMissionDateTime date = GenerateCampaignDate(campaignTemplate); using (MissionGenerator generator = new MissionGenerator()) { for (int i = 0; i < campaignTemplate.MissionsCount; i++) { MissionTemplate template = CreateMissionTemplate(campaignTemplate, i, campaignName, ref date); DCSMission mission = generator.Generate(template); MizFile miz = mission.ExportToMiz(); miz.SaveToFile(Path.Combine(campaignDirectory, $"{campaignName}{i + 1:00}.miz")); } } CreateImageFiles(campaignTemplate, campaignFilePath); CreateCMPFile(campaignTemplate, campaignFilePath); }
private MissionTemplate CreateMissionTemplate(CampaignTemplate campaignTemplate, int index, string campaignName, ref DCSMissionDateTime currentDate) { // Increment the date by a few days for each mission after the first if (index > 0) { currentDate = IncrementDate(currentDate); } MissionTemplate template = new MissionTemplate(); template.BriefingDate.Enabled = true; template.BriefingDate.Day = currentDate.Day; template.BriefingDate.Month = currentDate.Month; template.BriefingDate.Year = currentDate.Year; template.BriefingDescription = ""; template.BriefingName = $"{campaignName}, phase {index + 1}"; template.ContextCoalitionBlue = campaignTemplate.ContextCoalitionsBlue; template.ContextCoalitionPlayer = campaignTemplate.PlayerCoalition; template.ContextCoalitionRed = campaignTemplate.ContextCoalitionsRed; template.EnvironmentTimeOfDay = GetTimeOfDayForMission(campaignTemplate.EnvironmentNightMissionChance); template.EnvironmentWeather = GetWeatherForMission(campaignTemplate.EnvironmentBadWeatherChance); template.EnvironmentWind = Wind.Auto; template.ObjectiveCount = GetObjectiveCountForMission(campaignTemplate.MissionsObjectiveCount); template.ObjectiveDistanceNM = Database.Instance.Common.DistanceFromTakeOffLocation[(int)campaignTemplate.MissionsObjectiveDistance]; template.ObjectiveType = Toolbox.RandomFrom(campaignTemplate.MissionsTypes); template.OppositionAirDefense = GetPowerLevel(campaignTemplate.SituationEnemyAirDefense, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount); template.OppositionAirForce = GetPowerLevel(campaignTemplate.SituationEnemyAirForce, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount); template.OppositionSkillLevelAir = GetSkillLevel(campaignTemplate.SituationEnemyAirForce, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount); template.OppositionSkillLevelGround = GetSkillLevel(campaignTemplate.SituationEnemyAirDefense, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount); template.OppositionUnitsLocation = SpawnPointPreferredCoalition.Any; template.OptionsCivilianTraffic = campaignTemplate.OptionsCivilianTraffic; template.OptionsEndMode = MissionEndMode.NoEnd; template.OptionsPreferences = campaignTemplate.OptionsPreferences.ToArray(); template.OptionsRealism = campaignTemplate.OptionsRealism.ToArray(); template.OptionsScriptExtensions = new string[0]; template.OptionsUnitMods = campaignTemplate.OptionsUnitMods; template.PlayerAISkillLevel = GetSkillLevel(campaignTemplate.SituationFriendlyAirForce, CampaignDifficultyVariation.Steady, 0, 0); template.PlayerEscortCAP = Toolbox.RandomFrom(2, 2, 2, 2, 3, 4, 4); template.PlayerEscortSEAD = Toolbox.RandomFrom(2, 2, 2, 2, 3, 4, 4); template.PlayerMPFlightGroups = new MissionTemplateMPFlightGroup[0]; template.PlayerSPAircraft = campaignTemplate.PlayerAircraft; template.PlayerSPWingmen = Toolbox.RandomFrom(1, 1, 1, 1, 2, 3, 3); template.PlayerStartLocation = campaignTemplate.PlayerStartLocation; template.PlayerSPCarrier = campaignTemplate.PlayerStartingCarrier; template.TheaterID = campaignTemplate.ContextTheaterID; template.TheaterRegionsCoalitions = campaignTemplate.ContextTheaterRegionsCoalitions; template.TheaterStartingAirbase = campaignTemplate.PlayerStartingAirbase; return(template); }