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/)