From f29216599dca93b317525fc4781fb13dcb2b9ba5 Mon Sep 17 00:00:00 2001
From: ConnorMolz <114417919+ConnorMolz@users.noreply.github.com>
Date: Mon, 2 Jun 2025 13:41:59 +0200
Subject: [PATCH 1/4] Basic implementation of Flag Panel
---
.../API/Overlays/FlagPanel/FlagPanel.html | 87 +++++++++++
.../API/Overlays/FlagPanel/FlagPanelModel.cs | 6 +
RaceOverlay/API/StartAPI.cs | 142 ++++++++++++++++++
.../SetupHider => Internals}/ImageClass.cs | 2 +-
RaceOverlay/RaceOverlay.csproj | 2 +
5 files changed, 238 insertions(+), 1 deletion(-)
create mode 100644 RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html
create mode 100644 RaceOverlay/API/Overlays/FlagPanel/FlagPanelModel.cs
rename RaceOverlay/{API/Overlays/SetupHider => Internals}/ImageClass.cs (74%)
diff --git a/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html b/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html
new file mode 100644
index 0000000..7de84f5
--- /dev/null
+++ b/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+ Flag Panel
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/RaceOverlay/API/Overlays/FlagPanel/FlagPanelModel.cs b/RaceOverlay/API/Overlays/FlagPanel/FlagPanelModel.cs
new file mode 100644
index 0000000..2659e58
--- /dev/null
+++ b/RaceOverlay/API/Overlays/FlagPanel/FlagPanelModel.cs
@@ -0,0 +1,6 @@
+namespace RaceOverlay.API.Overlays.FlagPanel;
+
+public class FlagPanelModel
+{
+
+}
\ No newline at end of file
diff --git a/RaceOverlay/API/StartAPI.cs b/RaceOverlay/API/StartAPI.cs
index 4a8c8e3..8e2b9b8 100644
--- a/RaceOverlay/API/StartAPI.cs
+++ b/RaceOverlay/API/StartAPI.cs
@@ -12,6 +12,7 @@
using RaceOverlay.API.Overlays.LaptimeDelta;
using RaceOverlay.API.Overlays.SetupHider;
using RaceOverlay.API.Overlays.WeatherInfo;
+using RaceOverlay.Internals;
namespace RaceOverlay.API;
@@ -262,6 +263,147 @@ public static IHost StartApiServer()
LaptimeDeltaModel data = new LaptimeDeltaModel(MainWindow.IRacingData.LocalDriver.LastLapDelta);
return Results.Ok(data);
});
+
+
+ //
+ // Flag Panel
+ //
+ endpoints.MapGet("/overlay/flag_panel", () =>
+ {
+ var assembly = typeof(StartAPI).Assembly;
+ var resourceName = "RaceOverlay.API.Overlays.FlagPanel.FlagPanel.html";
+
+ using var stream = assembly.GetManifestResourceStream(resourceName);
+ if (stream == null)
+ {
+ return Results.NotFound("Overlay file not found");
+ }
+
+ using var reader = new StreamReader(stream);
+ var htmlContent = reader.ReadToEnd();
+ return Results.Content(htmlContent, "text/html");
+ })
+ .WithName("GetFlagPanelOverlay");
+
+ endpoints.MapGet("/overlay/flag_panel/data", () =>
+ {
+ Debug.WriteLine("GetSetupHiderOverlayData");
+ SetupHiderModel data = new SetupHiderModel();
+ return Results.Ok(data);
+ })
+ .WithName("GetFlagPanelData");
+
+ endpoints.MapGet("/overlay/flag_panel/dsq_flag", () =>
+ {
+ Debug.WriteLine("GetMeetballFlagImage");
+
+ var assembly = typeof(StartAPI).Assembly;
+ var resourceName = "RaceOverlay.Overlays.FlagPanel.dsq_flag.png";
+
+ using (var stream = assembly.GetManifestResourceStream(resourceName))
+ {
+ if (stream == null)
+ {
+ Debug.WriteLine($"Resource nicht gefunden: {resourceName}");
+ return Results.NotFound("Flag-Bild nicht gefunden");
+ }
+
+ using (var memoryStream = new MemoryStream())
+ {
+ stream.CopyTo(memoryStream);
+ byte[] imageBytes = memoryStream.ToArray();
+ string base64String = Convert.ToBase64String(imageBytes);
+ string mimeType = "image/png"; // Anpassen je nach Bildformat
+
+ ImageClass data = new ImageClass($"data:{mimeType};base64,{base64String}");
+ return Results.Ok(data);
+ }
+ }
+ }).WithName("GetFlagPanelDSQImage");
+
+ endpoints.MapGet("/overlay/flag_panel/checkered_flag", () =>
+ {
+ Debug.WriteLine("GetMeetballFlagImage");
+
+ var assembly = typeof(StartAPI).Assembly;
+ var resourceName = "RaceOverlay.Overlays.FlagPanel.checkered_flag.png";
+
+ using (var stream = assembly.GetManifestResourceStream(resourceName))
+ {
+ if (stream == null)
+ {
+ Debug.WriteLine($"Resource nicht gefunden: {resourceName}");
+ return Results.NotFound("Flag-Bild nicht gefunden");
+ }
+
+ using (var memoryStream = new MemoryStream())
+ {
+ stream.CopyTo(memoryStream);
+ byte[] imageBytes = memoryStream.ToArray();
+ string base64String = Convert.ToBase64String(imageBytes);
+ string mimeType = "image/png"; // Anpassen je nach Bildformat
+
+ ImageClass data = new ImageClass($"data:{mimeType};base64,{base64String}");
+ return Results.Ok(data);
+ }
+ }
+ }).WithName("GetFlagPanelCheckeredImage");
+
+ endpoints.MapGet("/overlay/flag_panel/debris_flag", () =>
+ {
+ Debug.WriteLine("GetMeetballFlagImage");
+
+ var assembly = typeof(StartAPI).Assembly;
+ var resourceName = "RaceOverlay.Overlays.FlagPanel.debris_flag.png";
+
+ using (var stream = assembly.GetManifestResourceStream(resourceName))
+ {
+ if (stream == null)
+ {
+ Debug.WriteLine($"Resource nicht gefunden: {resourceName}");
+ return Results.NotFound("Flag-Bild nicht gefunden");
+ }
+
+ using (var memoryStream = new MemoryStream())
+ {
+ stream.CopyTo(memoryStream);
+ byte[] imageBytes = memoryStream.ToArray();
+ string base64String = Convert.ToBase64String(imageBytes);
+ string mimeType = "image/png"; // Anpassen je nach Bildformat
+
+ ImageClass data = new ImageClass($"data:{mimeType};base64,{base64String}");
+ return Results.Ok(data);
+ }
+ }
+ }).WithName("GetFlagPanelDebrisImage");
+
+ endpoints.MapGet("/overlay/flag_panel/meetball_flag", () =>
+ {
+ Debug.WriteLine("GetMeetballFlagImage");
+
+ var assembly = typeof(StartAPI).Assembly;
+ var resourceName = "RaceOverlay.Overlays.FlagPanel.meetball_flag.png";
+
+ using (var stream = assembly.GetManifestResourceStream(resourceName))
+ {
+ if (stream == null)
+ {
+ Debug.WriteLine($"Resource nicht gefunden: {resourceName}");
+ return Results.NotFound("Flag-Bild nicht gefunden");
+ }
+
+ using (var memoryStream = new MemoryStream())
+ {
+ stream.CopyTo(memoryStream);
+ byte[] imageBytes = memoryStream.ToArray();
+ string base64String = Convert.ToBase64String(imageBytes);
+ string mimeType = "image/png"; // Anpassen je nach Bildformat
+
+ ImageClass data = new ImageClass($"data:{mimeType};base64,{base64String}");
+ return Results.Ok(data);
+ }
+ }
+ }).WithName("GetMeetballFlagImage");
});
})
diff --git a/RaceOverlay/API/Overlays/SetupHider/ImageClass.cs b/RaceOverlay/Internals/ImageClass.cs
similarity index 74%
rename from RaceOverlay/API/Overlays/SetupHider/ImageClass.cs
rename to RaceOverlay/Internals/ImageClass.cs
index a2ab2db..0f87456 100644
--- a/RaceOverlay/API/Overlays/SetupHider/ImageClass.cs
+++ b/RaceOverlay/Internals/ImageClass.cs
@@ -1,4 +1,4 @@
-namespace RaceOverlay.API.Overlays.SetupHider;
+namespace RaceOverlay.Internals;
public class ImageClass
{
diff --git a/RaceOverlay/RaceOverlay.csproj b/RaceOverlay/RaceOverlay.csproj
index d6ebd65..ff61531 100644
--- a/RaceOverlay/RaceOverlay.csproj
+++ b/RaceOverlay/RaceOverlay.csproj
@@ -52,6 +52,8 @@
+
+
From f3bd69305f14a1ad8955aff5e13efbc2e518f425 Mon Sep 17 00:00:00 2001
From: ConnorMolz <114417919+ConnorMolz@users.noreply.github.com>
Date: Mon, 2 Jun 2025 13:54:25 +0200
Subject: [PATCH 2/4] Fix style
---
.../API/Overlays/FlagPanel/FlagPanel.html | 85 +++++++++++++++++--
1 file changed, 76 insertions(+), 9 deletions(-)
diff --git a/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html b/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html
index 7de84f5..154b101 100644
--- a/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html
+++ b/RaceOverlay/API/Overlays/FlagPanel/FlagPanel.html
@@ -18,15 +18,21 @@
.overlay-container {
background-color: #1E1E1E;
border-radius: 10px;
- position: relative;
+ padding: 10px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ .flag-canvas {
+ border-radius: 5px;
+ display: block;
}
-
-
-
+