El videojuego F1 2020 te proporcionará un paquete de datos UDP en forma de matriz de bytes ( byte[]
). Hay varios tipos diferentes de paquetes de datos que transmitirá el juego. Importe el siguiente espacio de nombres para utilizar los recursos básicos para leer datos:
using Codemasters.F1_2020;
Cada tipo de paquete deriva de la misma clase base, Packet
. La clase Packet
contiene las siguientes propiedades:
PacketFormat
: describe el juego del que proviene el paquete (F1 2020)
GameMajorVersion
: la versión principal del juego en el momento de la transmisión.
GameMinorVersion
: la versión menor del juego en el momento de la transmisión.
PacketVersion
PacketType
: el tipo de paquete que son estos datos (es decir, telemetría, estado, datos de vuelta, etc.)
UniqueSessionId
: el ID único de su sesión.
SessioTime
: la marca de tiempo de la sesión actual cuando se grabó y transmitió este paquete.
FrameIdentifier
: a qué grupo de paquetes pertenecen estos datos.
PlayerCarIndex
: el índice del automóvil del jugador en matrices de campo en todos los paquetes correspondientes.
SecondaryPlayerCarIndex
: si juegas con dos jugadores (pantalla dividida), este será el índice del jugador 2 en la matriz de campos.
Para saber qué tipo de paquete es cualquier conjunto de bytes que se le proporcionó, utilice CodemastersToolkit. La siguiente variable bytes
provendría de su transmisión de telemetría o de un archivo deserializado si guardó la telemetría en el disco.
byte[] bytes; //Your telemetry data package
PacketType pt = CodemastersToolkit.GetPacketType(bytes);
Console.WriteLine(pt.ToString());
Salida de consola de lo anterior: "CarTelemetry"
Como sabemos que este paquete de datos en particular es un paquete de telemetría, podemos crear un paquete de telemetría:
TelemetryPacket tp = new TelemetryPacket();
tp.LoadBytes(bytes);
La clase TelemetryPacket
contiene una matriz de CarTelemetryData
, uno para cada automóvil en el campo.
Como ejemplo, el siguiente código imprimirá la presión del acelerador que cada conductor está aplicando en el momento en que se transmitieron estos datos.
foreach (TelemetryPacket.CarTelemetryData ctd in tp.FieldTelemetryData)
{
Console.WriteLine(ctd.Throttle.ToString());
}
Muchos de los paquetes siguen un formato similar al que se ve arriba con TelemetryPacket
.
Puede convertir todos los paquetes de matrices de bytes que recibió. Ejemplo:
List<byte[]> telemetry;
Packet[] packets = CodemastersToolkit.BulkConvertByteArraysToPackets(telemetry);
Luego puede convertir cada paquete de la matriz de paquetes devuelta. Por ejemplo, convertir un Packet
en TelemetryPacket
:
foreach (Packet p in packets)
{
if (p.PacketType == PacketType.CarTelemetry)
{
TelemetryPacket telpack = (TelemetryPacket)p;
}
}
Es posible que necesite, por ejemplo, buscar el CarStatusPacket
adjunto para un TelemetryPacket
en particular. Para hacer esto:
TelemetryPacket telpack;
CarStatusPacket csp = (CarStatusPacket)telpack.GetRelatedPacket(packets, PacketType.CarStatus);
**Si anteriormente utilizó el espacio de nombres Codemasters.F1_2020.Analysis y ahora falta: el espacio de nombres de análisis se ha movido al paquete NuGet ApexVisual.F1_2020 (https://www.nuget.org/packages/ApexVisual.F1_2020/)