feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

108 lines
2.3 KiB
C#

using ImGuiNET;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Numerics;
using System.Reflection;
using System.Runtime.Intrinsics.X86;
using System.Text;
using System.Threading.Tasks;
using skyscraper5.Skyscraper.Gps;
namespace SDL2Demo.Forms
{
internal class GpsDisplay : IRenderable
{
private readonly IGpsReceiver gps;
public GpsDisplay(IGpsReceiver gps)
{
this.gps = gps;
}
private string tableUuid;
private PropertyInfo[] nmeaProps;
private Vector2? setWindowSize;
public bool RenderNmea { get; set; }
public bool HasNmea { get; set; }
public void Render()
{
if (this.tableUuid == null)
tableUuid = Guid.NewGuid().ToString();
if (setWindowSize.HasValue)
{
ImGui.SetNextWindowSize(setWindowSize.Value);
setWindowSize = null;
}
if (ImGui.Begin("GPS", ImGuiWindowFlags.AlwaysVerticalScrollbar))
{
float f = ImGui.GetWindowWidth();
if (f < 310)
{
setWindowSize = new Vector2(310, ImGui.GetWindowHeight());
}
if (gps.HasLock)
{
ImGui.BeginTable(tableUuid, 2);
ImGui.TableNextRow();
ImGui.TableSetColumnIndex(0);
ImGui.Text("Location");
ImGui.TableSetColumnIndex(1);
GpsCoordinate gpsCoordinate = gps.Coordinate;
ImGui.Text(String.Format("{0}, {1}", gpsCoordinate.Latitude, gpsCoordinate.Longitude));
ImGui.Spacing();
ImGui.Spacing();
ImGui.Spacing();
HasNmea = gps.ProvidesAdditionalNmeaData;
if (RenderNmea)
{
AdditionalNmeaData nmeaData = gps.AdditionalNmeaData;
if (nmeaData != null)
{
if (nmeaProps == null)
nmeaProps = nmeaData.GetType().GetProperties();
foreach (PropertyInfo propertyInfo in nmeaProps)
{
if (propertyInfo.PropertyType.IsArray)
continue;
if (propertyInfo.Name.Equals(nameof(nmeaData.Satellites)))
continue;
object? value = propertyInfo.GetValue(nmeaData);
if (value != null)
{
ImGui.TableNextRow();
ImGui.TableSetColumnIndex(0);
ImGui.Text(propertyInfo.Name);
ImGui.TableSetColumnIndex(1);
ImGui.Text(value.ToString());
}
}
}
}
ImGui.EndTable();
}
else
{
ImGui.Text("Waiting for lock...");
}
ImGui.End();
}
}
}
}