Le jeu vidéo F1 2020 vous fournira un package de données UDP sous la forme d'un tableau d'octets ( byte[]
). Il existe plusieurs types différents de paquets de données que le jeu diffusera. Importez l'espace de noms suivant pour utiliser les ressources de base pour lire les données :
using Codemasters.F1_2020;
Chaque type de paquet dérive de la même classe de base, Packet
. La classe Packet
contient les propriétés suivantes :
PacketFormat
- Décrit le jeu d'où provient le paquet (F1 2020)
GameMajorVersion
- La version majeure du jeu au moment de la diffusion
GameMinorVersion
- La version mineure du jeu au moment de la diffusion
PacketVersion
PacketType
- Le type de paquet de ces données (c'est-à-dire télémétrie, statut, données de tour, etc.)
UniqueSessionId
- L'ID unique de votre session.
SessioTime
- L'horodatage de la session en cours lorsque ce paquet a été enregistré et diffusé.
FrameIdentifier
- À quel groupe de paquets appartiennent ces données.
PlayerCarIndex
- L'index de la voiture du joueur dans les tableaux de champs dans tous les paquets correspondants.
SecondaryPlayerCarIndex
- Si vous jouez à deux joueurs (écran partagé), ce sera l'index du joueur 2 dans le tableau de champs.
Pour savoir à quel type de paquet correspond un tableau d'octets qui vous a été fourni, utilisez CodemastersToolkit. La variable bytes
ci-dessous proviendrait de votre diffusion de télémétrie, ou d'un fichier désérialisé si vous avez enregistré la télémétrie sur disque.
byte[] bytes; //Your telemetry data package
PacketType pt = CodemastersToolkit.GetPacketType(bytes);
Console.WriteLine(pt.ToString());
Sortie console de ce qui précède : "CarTelemetry"
Puisque nous savons que ce paquet de données particulier est un paquet de télémétrie, nous pouvons créer un paquet de télémétrie :
TelemetryPacket tp = new TelemetryPacket();
tp.LoadBytes(bytes);
La classe TelemetryPacket
contient un tableau de CarTelemetryData
, un pour chaque voiture sur le terrain.
À titre d'exemple, le code ci-dessous imprimera la pression de l'accélérateur que chaque pilote applique au moment où ces données ont été diffusées.
foreach (TelemetryPacket.CarTelemetryData ctd in tp.FieldTelemetryData)
{
Console.WriteLine(ctd.Throttle.ToString());
}
De nombreux paquets suivent un format similaire à celui présenté ci-dessus avec TelemetryPacket
.
Vous pouvez convertir tous les packages de tableaux d'octets que vous avez reçus. Exemple:
List<byte[]> telemetry;
Packet[] packets = CodemastersToolkit.BulkConvertByteArraysToPackets(telemetry);
Vous pouvez ensuite convertir chaque paquet du tableau de paquets renvoyé. Par exemple, convertir un Packet
en TelemetryPacket
:
foreach (Packet p in packets)
{
if (p.PacketType == PacketType.CarTelemetry)
{
TelemetryPacket telpack = (TelemetryPacket)p;
}
}
Vous devrez peut-être, par exemple, rechercher le CarStatusPacket
qui l'accompagne pour un TelemetryPacket
particulier. Pour ce faire :
TelemetryPacket telpack;
CarStatusPacket csp = (CarStatusPacket)telpack.GetRelatedPacket(packets, PacketType.CarStatus);
**Si vous avez déjà utilisé l'espace de noms Codemasters.F1_2020.Analysis et que vous le trouvez désormais manquant : l'espace de noms d'analyse a été déplacé sous le package NuGet ApexVisual.F1_2020 (https://www.nuget.org/packages/ApexVisual.F1_2020/)