Das Videospiel F1 2020 stellt Ihnen ein UDP-Datenpaket in Form eines Byte-Arrays ( byte[] ) zur Verfügung. Es gibt verschiedene Arten von Datenpaketen, die das Spiel sendet. Importieren Sie den folgenden Namespace, um die grundlegenden Ressourcen zum Lesen von Daten zu verwenden:
using Codemasters.F1_2020;
Jeder Pakettyp leitet sich von derselben Basisklasse Packet ab. Die Packet -Klasse enthält die folgenden Eigenschaften:
PacketFormat – Beschreibt das Spiel, aus dem das Paket stammt (F1 2020)
GameMajorVersion – Die Hauptversion des Spiels zum Zeitpunkt der Ausstrahlung
GameMinorVersion – Die Nebenversion des Spiels zum Zeitpunkt der Ausstrahlung
PacketVersion
PacketType – Der Pakettyp, um den es sich bei diesen Daten handelt (z. B. Telemetrie, Status, Rundendaten usw.)
UniqueSessionId – Die eindeutige ID Ihrer Sitzung.
SessioTime – Der Zeitstempel der aktuellen Sitzung, in der dieses Paket aufgezeichnet und gesendet wurde.
FrameIdentifier – Zu welcher Paketgruppe diese Daten gehören.
PlayerCarIndex – Der Index des Autos des Spielers in Feldarrays in allen entsprechenden Paketen.
SecondaryPlayerCarIndex – Wenn Sie mit zwei Spielern spielen (geteilter Bildschirm), ist dies der Index von Spieler 2 im Feldarray.
Um festzustellen, um welchen Pakettyp es sich bei einem Ihnen bereitgestellten Byte-Array handelt, verwenden Sie das CodemastersToolkit. Die folgende bytes Variable stammt aus Ihrer Telemetrieübertragung oder aus einer deserialisierten Datei, wenn Sie Telemetriedaten auf der Festplatte gespeichert haben.
byte[] bytes; //Your telemetry data package
PacketType pt = CodemastersToolkit.GetPacketType(bytes);
Console.WriteLine(pt.ToString());
Konsolenausgabe des Obigen: „CarTelemetry“
Da wir wissen, dass es sich bei diesem bestimmten Datenpaket um ein Telemetriepaket handelt, können wir ein Telemetriepaket erstellen:
TelemetryPacket tp = new TelemetryPacket();
tp.LoadBytes(bytes);
Die TelemetryPacket -Klasse enthält ein Array von CarTelemetryData , eines für jedes Auto im Feld.
Der folgende Code gibt beispielsweise den Gasdruck aus, den jeder Fahrer zum Zeitpunkt der Übertragung dieser Daten anwendet.
foreach (TelemetryPacket.CarTelemetryData ctd in tp.FieldTelemetryData)
{
Console.WriteLine(ctd.Throttle.ToString());
}
Viele der Pakete haben ein ähnliches Format, wie oben beim TelemetryPacket zu sehen ist.
Sie können alle Byte-Array-Pakete konvertieren, die Sie erhalten haben. Beispiel:
List<byte[]> telemetry;
Packet[] packets = CodemastersToolkit.BulkConvertByteArraysToPackets(telemetry);
Anschließend können Sie jedes Paket aus dem zurückgegebenen Paketarray konvertieren. Konvertieren Sie beispielsweise ein Packet in TelemetryPacket :
foreach (Packet p in packets)
{
if (p.PacketType == PacketType.CarTelemetry)
{
TelemetryPacket telpack = (TelemetryPacket)p;
}
}
Möglicherweise müssen Sie beispielsweise das zugehörige CarStatusPacket für ein bestimmtes TelemetryPacket finden. Gehen Sie dazu wie folgt vor:
TelemetryPacket telpack;
CarStatusPacket csp = (CarStatusPacket)telpack.GetRelatedPacket(packets, PacketType.CarStatus);
**Wenn Sie zuvor den Codemasters.F1_2020.Analysis-Namespace verwendet haben und ihn nun fehlen: Der Analysis-Namespace wurde unter das NuGet-Paket ApexVisual.F1_2020 verschoben (https://www.nuget.org/packages/ApexVisual.F1_2020/)