108 lines
2.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|