internal static async Task <DCSCampaign> GenerateAsync(CampaignTemplate campaignTemplate) { DCSCampaign campaign = new(); campaign.Name = GeneratorTools.GenerateMissionName(campaignTemplate.BriefingCampaignName);; string baseFileName = Toolbox.RemoveInvalidPathCharacters(campaign.Name); DateTime date = GenerateCampaignDate(campaignTemplate); campaignTemplate.Player.AIWingmen = true; //Make sure wingmen is always true for campaign for (int i = 0; i < campaignTemplate.MissionsCount; i++) { // Increment the date by a few days for each mission after the first if (i > 0) { date = IncrementDate(date); } MissionTemplateRecord template = CreateMissionTemplate(campaignTemplate, campaign.Name, i, (int)campaignTemplate.MissionsObjectiveCount); DCSMission mission = await MissionGenerator.GenerateAsync(template, true); // TODO: mission.DateTime.Day = date.Day; mission.DateTime.Month = date.Month; mission.DateTime.Year = date.Year; if (mission == null) { BriefingRoom.PrintToLog($"Failed to generate mission {i + 1} in the campaign.", LogMessageErrorLevel.Warning); continue; } campaign.AddMission(mission); } if (campaign.MissionCount < 1) // No missions generated, something went very wrong. { throw new BriefingRoomException($"Campaign has no valid mission."); } CreateImageFiles(campaignTemplate, campaign, baseFileName); campaign.CMPFile = GetCMPFile(campaignTemplate, campaign.Name); return(campaign); }