public static async Task Aggregator( FPGA.OutputSignal <bool> LED1, FPGA.InputSignal <bool> RXD, FPGA.OutputSignal <bool> TXD ) { Sequential handler = () => { FPU.FPUScope(); const int width = 10; const int baud = 115200; while (true) { byte data = UART.Read(baud, RXD); uint length = GeneratorTools.ArrayLength(width); for (uint i = 0; i < length; i++) { uint reversed = FPGA.Runtime.Reverse(i, width); UART.WriteUnsigned32(baud, reversed, TXD); } } }; FPGA.Config.OnStartup(handler); Drivers.IsAlive.Blink(LED1); }
public static async Task Aggregator( FPGA.InputSignal <bool> RXD, FPGA.OutputSignal <bool> TXD ) { uint clockCounter = 0; Diag.ClockCounter(clockCounter); Sequential handler = () => { FPU.FPUScopeNoSync(); const int width = 10; const int baud = 115200; ComplexFloat[] source = new ComplexFloat[GeneratorTools.ArrayLength(width)]; ComplexFloat[] target = new ComplexFloat[GeneratorTools.ArrayLength(width)]; FPGA.Config.NoSync(source); while (true) { RTX.ReadData(baud, RXD, source); uint start = clockCounter; FFT.Transform(width, source, target, Direction.Forward); uint end = clockCounter; RTX.WriteData(baud, TXD, target, end - start); } }; FPGA.Config.OnStartup(handler); }
/// <summary> /// Generates the title image for the mission. /// </summary> /// <param name="mission">The misison which requires a title image.</param> /// <returns>The mission title image, as an array of bytes for a JPEG file.</returns> private byte[] GetTitleImage(DCSMission mission) { byte[] imageBytes; using (ImageMaker imgMaker = new ImageMaker()) { imgMaker.TextOverlay.Text = mission.MissionName; imgMaker.TextOverlay.Alignment = ContentAlignment.BottomCenter; List <ImageMakerLayer> layers = new List <ImageMakerLayer>(); string[] theaterImages = Directory.GetFiles($"{BRPaths.INCLUDE_JPG}Theaters\\", $"{mission.Theater}*.jpg"); if (theaterImages.Length == 0) { layers.Add(new ImageMakerLayer("_default.jpg")); } else { layers.Add(new ImageMakerLayer("Theaters\\" + Path.GetFileName(Toolbox.RandomFrom(theaterImages)))); } layers.Add(new ImageMakerLayer($"Flags\\{GeneratorTools.RemoveAfterComma(mission.Coalitions[(int)mission.CoalitionPlayer])}.png", ContentAlignment.TopLeft, 8, 8, 0, .5)); imageBytes = imgMaker.GetImageBytes(layers.ToArray()); } return(imageBytes); }
private static string GetCMPFile(CampaignTemplate campaignTemplate, string campaignName) { string lua = File.ReadAllText(CAMPAIGN_LUA_TEMPLATE); GeneratorTools.ReplaceKey(ref lua, "Name", campaignName); GeneratorTools.ReplaceKey(ref lua, "Description", $"This is a {campaignTemplate.ContextCoalitionBlue} vs {campaignTemplate.ContextCoalitionRed} randomly-generated campaign created by an early version of the campaign generator of BriefingRoom, a mission generator for DCS World ({BriefingRoom.WEBSITE_URL})."); GeneratorTools.ReplaceKey(ref lua, "Units", ""); string stagesLua = ""; for (int i = 0; i < campaignTemplate.MissionsCount; i++) { string nextStageLua = File.ReadAllText(CAMPAIGN_STAGE_LUA_TEMPLATE); GeneratorTools.ReplaceKey(ref nextStageLua, "Index", i + 1); GeneratorTools.ReplaceKey(ref nextStageLua, "Name", $"Stage {i + 1}"); GeneratorTools.ReplaceKey(ref nextStageLua, "Description", $""); GeneratorTools.ReplaceKey(ref nextStageLua, "File", $"{campaignName}{i + 1:00}.miz"); stagesLua += nextStageLua + "\r\n"; } GeneratorTools.ReplaceKey(ref lua, "Stages", stagesLua); return(lua.Replace("\r\n", "\n")); }
public static void Transform(uint bits, ComplexFloat[] data, Direction direction) { FPGA.Const <uint> n = GeneratorTools.ArrayLength(bits); FPGA.Const <float> nFloat = GeneratorTools.FloatArrayLength(bits); uint mask = GeneratorTools.Mask(bits); ComplexFloat[] transformed = new ComplexFloat[data.Length]; float[] cosMap = GeneratorTools.CosArray(n, direction); var tmp = new ComplexFloat(); // for each destination element for (uint i = 0; i < n; i++) { tmp.Re = 0.0f; tmp.Im = 0.0f; // sum source elements for (uint j = 0; j < n; j++) { ComplexFloat source = new ComplexFloat(); source = data[j]; FTTools.RotateAndAdd(cosMap, bits, ref source, ref tmp, i * j); } transformed[i] = tmp; } FTTools.CopyAndNormalize(bits, transformed, data, direction, ref tmp); }
public static async Task Aggregator( FPGA.OutputSignal <bool> LED1, FPGA.InputSignal <bool> RXD, FPGA.OutputSignal <bool> TXD ) { Sequential handler = () => { FPU.FPUScope(); const int width = 10; const int baud = 115200; ComplexFloat[] data = new ComplexFloat[GeneratorTools.ArrayLength(width)]; while (true) { RTX.ReadData(baud, RXD, data); DFT.Transform(width, data, Direction.Forward); RTX.WriteData(baud, TXD, data, 0); } }; FPGA.Config.OnStartup(handler); Drivers.IsAlive.Blink(LED1); }
/// <summary> /// 创建模型主体 /// </summary> /// <param name="structs"></param> /// <returns></returns> private string CreateBody(string tableName, List <TableStruct> structs) { StringBuilder builder = new StringBuilder(); builder.Append("[Serializable]\r\n"); builder.Append("public partial class " + tableName + "\r\n"); builder.Append("{\r\n"); builder.Append("\r\n"); builder.Append("#region private field \r\n"); builder.Append("\r\n"); foreach (var t in structs) { builder.Append("private " + GeneratorTools.SqlTypeName2DotNetType(t.DATA_TYPE) + " _" + t.COLUMN_NAME + ";\r\n"); } builder.Append("\r\n"); builder.Append("#endregion \r\n"); builder.Append("\r\n"); foreach (var t in structs) { if (t.ISPRIMARY) { builder.Append("[Key]\r\n"); } string COLUMN_NAME = t.COLUMN_NAME; string COLUMN_BODY = "{get{return " + "_" + COLUMN_NAME + ";}set{" + "_" + COLUMN_NAME + "=value;}}\r\n"; builder.Append("public " + GeneratorTools.SqlTypeName2DotNetType(t.DATA_TYPE) + " " + COLUMN_NAME + COLUMN_BODY); builder.Append("\r\n"); } builder.Append("}\r\n"); return(builder.ToString()); }
public void CosArray8PointsForward() { var cos45 = (float)(Math.Sqrt(2) / 2); var arr = GeneratorTools.CosArray(8, Direction.Forward); var expected = new float[] { 1, cos45, 0, -cos45, -1, -cos45, 0, cos45 }; }
private static DateTime GenerateCampaignDate(CampaignTemplate campaignTemplate) { int year = Toolbox.GetRandomYearFromDecade(campaignTemplate.ContextDecade); Month month = Toolbox.RandomFrom(Toolbox.GetEnumValues <Month>()); int day = Toolbox.RandomMinMax(1, GeneratorTools.GetDaysPerMonth(month, year)); DateTime date = new DateTime(year, (int)month + 1, day); return(date); }
public string GetFlightBriefingKneeBoardHTML(DCSMission mission) { string html = Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}KneeboardHeader.html") + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}KneeboardFlight.html") + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}BriefingFooter.html"); GeneratorTools.ReplaceKey(ref html, "BriefingAirbases", GeneratorTools.MakeHTMLTable(mission.Briefing.GetItems(DCSMissionBriefingItemType.Airbase))); GeneratorTools.ReplaceKey(ref html, "BriefingJTAC", GeneratorTools.MakeHTMLTable(mission.Briefing.GetItems(DCSMissionBriefingItemType.JTAC))); GeneratorTools.ReplaceKey(ref html, "BriefingFlightName", Name); GeneratorTools.ReplaceKey(ref html, "BriefingWaypoints", GeneratorTools.MakeHTMLTable(Waypoints.ToArray())); return(html); }
public string GetBriefingKneeBoardFlightsHTML() { string html = Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}KneeboardHeader.html") + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}KneeboardFlights.html") + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}BriefingFooter.html"); html = Mission.ReplaceValues(html); GeneratorTools.ReplaceKey(ref html, "BriefingFlightGroups", GeneratorTools.MakeHTMLTable(GetItems(DCSMissionBriefingItemType.FlightGroup))); return(html); }
public string GetBriefingKneeBoardTasksAndRemarksHTML() { string html = Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}KneeboardHeader.html") + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}KneeboardTasksRemarks.html") + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}BriefingFooter.html"); html = Mission.ReplaceValues(html); GeneratorTools.ReplaceKey(ref html, "BriefingRemarks", GeneratorTools.MakeHTMLList(GetItems(DCSMissionBriefingItemType.Remark))); GeneratorTools.ReplaceKey(ref html, "BriefingTasks", GeneratorTools.MakeHTMLList(GetItems(DCSMissionBriefingItemType.Task))); return(html); }
public string GetBriefingAsRawText(string newLine = "\n") { string text = Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}Briefing.txt"); text = Mission.ReplaceValues(text); GeneratorTools.ReplaceKey(ref text, "BriefingAirbases", GeneratorTools.MakeRawTextList("\n", GetItems(DCSMissionBriefingItemType.Airbase)).Replace("\t", " ")); GeneratorTools.ReplaceKey(ref text, "BriefingFlightGroups", GeneratorTools.MakeRawTextList("\n", GetItems(DCSMissionBriefingItemType.FlightGroup)).Replace("\t", " ")); GeneratorTools.ReplaceKey(ref text, "BriefingRemarks", GeneratorTools.MakeRawTextList("\n", GetItems(DCSMissionBriefingItemType.Remark)).Replace("\t", " ")); GeneratorTools.ReplaceKey(ref text, "BriefingTasks", GeneratorTools.MakeRawTextList("\n", GetItems(DCSMissionBriefingItemType.Task)).Replace("\t", " ")); GeneratorTools.ReplaceKey(ref text, "BriefingWaypoints", GeneratorTools.MakeRawTextList("\n", GetItems(DCSMissionBriefingItemType.Waypoint)).Replace("\t", " ")); GeneratorTools.ReplaceKey(ref text, "BriefingJTAC", GeneratorTools.MakeRawTextList("\n", GetItems(DCSMissionBriefingItemType.JTAC)).Replace("\t", " ")); return(text.Replace("\r\n", "\n").Replace("\n", newLine).Replace("\"", "''")); }
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); }
public string GetBriefingAsHTML(bool htmlHeaderAndFooter = true) { string html = Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}Briefing.html"); if (htmlHeaderAndFooter) { html = Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}BriefingHeader.html") + html + Toolbox.ReadAllTextIfFileExists($"{BRPaths.INCLUDE_HTML}BriefingFooter.html"); } html = Mission.ReplaceValues(html); GeneratorTools.ReplaceKey(ref html, "BriefingAirbases", GeneratorTools.MakeHTMLTable(GetItems(DCSMissionBriefingItemType.Airbase))); GeneratorTools.ReplaceKey(ref html, "BriefingFlightGroups", GeneratorTools.MakeHTMLTable(GetItems(DCSMissionBriefingItemType.FlightGroup))); GeneratorTools.ReplaceKey(ref html, "BriefingRemarks", GeneratorTools.MakeHTMLList(GetItems(DCSMissionBriefingItemType.Remark))); GeneratorTools.ReplaceKey(ref html, "BriefingTasks", GeneratorTools.MakeHTMLList(GetItems(DCSMissionBriefingItemType.Task))); GeneratorTools.ReplaceKey(ref html, "BriefingJTAC", GeneratorTools.MakeHTMLTable(GetItems(DCSMissionBriefingItemType.JTAC))); GeneratorTools.ReplaceKey(ref html, "BriefingWaypoints", GeneratorTools.MakeHTMLTable(GetItems(DCSMissionBriefingItemType.Waypoint))); return(html); }
private void CreateImageFiles(CampaignTemplate campaignTemplate, string campaignFilePath) { string baseFileName = Path.Combine(Path.GetDirectoryName(campaignFilePath), Path.GetFileNameWithoutExtension(campaignFilePath)); string allyFlagName = GeneratorTools.RemoveAfterComma(campaignTemplate.GetCoalition(campaignTemplate.PlayerCoalition)); string enemyFlagName = GeneratorTools.RemoveAfterComma(campaignTemplate.GetCoalition((Coalition)(1 - (int)campaignTemplate.PlayerCoalition))); using (ImageMaker imgMaker = new ImageMaker()) { string theaterImage; string[] theaterImages = Directory.GetFiles($"{BRPaths.INCLUDE_JPG}Theaters\\", $"{campaignTemplate.ContextTheaterID}*.jpg"); if (theaterImages.Length == 0) { theaterImage = "_default.jpg"; } else { theaterImage = "Theaters\\" + Path.GetFileName(Toolbox.RandomFrom(theaterImages)); } // Print the name of the campaign over the campaign "title picture" imgMaker.TextOverlay.Text = Path.GetFileNameWithoutExtension(campaignFilePath); imgMaker.TextOverlay.Alignment = ContentAlignment.TopCenter; File.WriteAllBytes($"{baseFileName}_Title.jpg", imgMaker.GetImageBytes( new ImageMakerLayer(theaterImage), new ImageMakerLayer($"Flags\\{enemyFlagName}.png", ContentAlignment.MiddleCenter, -32, -32), new ImageMakerLayer($"Flags\\{allyFlagName}.png", ContentAlignment.MiddleCenter, 32, 32))); // Reset background and text overlay imgMaker.BackgroundColor = Color.Black; imgMaker.TextOverlay.Text = ""; File.WriteAllBytes($"{baseFileName}_Success.jpg", imgMaker.GetImageBytes("Sky.jpg", $"Flags\\{allyFlagName}.png")); File.WriteAllBytes($"{baseFileName}_Failure.jpg", imgMaker.GetImageBytes("Fire.jpg", $"Flags\\{allyFlagName}.png", "Burning.png")); } }
public static async Task Aggregator( FPGA.OutputSignal <bool> LED1, FPGA.InputSignal <bool> RXD, FPGA.OutputSignal <bool> TXD ) { Sequential handler = () => { FPU.FPUScope(); const int width = 10; const int baud = 115200; ComplexFloat[] data = new ComplexFloat[GeneratorTools.ArrayLength(width)]; while (true) { RTX.ReadData(baud, RXD, data); for (int idx = 0; idx < data.Length; idx++) { ComplexFloat tmp = new ComplexFloat(); tmp = data[idx]; tmp.Re = 1024f; tmp.Im = tmp.Im + 10f; data[idx] = tmp; } RTX.WriteData(baud, TXD, data, 0); } }; FPGA.Config.OnStartup(handler); Drivers.IsAlive.Blink(LED1); }
public void ZeroLength() { Assert.ThrowsException <ArgumentOutOfRangeException>(() => GeneratorTools.ArrayLength(0)); }
public void Mask16bits() { Assert.AreEqual(65535u, GeneratorTools.Mask(16)); }
public void Mask10bits() { Assert.AreEqual(1023u, GeneratorTools.Mask(10)); }
public void FloatLength10bits() { Assert.AreEqual(1024f, GeneratorTools.FloatArrayLength(10)); }
public void Length16bits() { Assert.AreEqual(65536u, GeneratorTools.ArrayLength(16)); }
public void Length10bits() { Assert.AreEqual(1024u, GeneratorTools.ArrayLength(10)); }