O videogame F1 2020 fornecerá a você um pacote de dados UDP na forma de uma matriz de bytes ( byte[]
). Existem vários tipos diferentes de pacotes de dados que o jogo irá transmitir. Importe o seguinte namespace para usar os recursos básicos para leitura de dados:
using Codemasters.F1_2020;
Cada tipo de pacote deriva da mesma classe base, Packet
. A classe Packet
contém as seguintes propriedades:
PacketFormat
- Descreve o jogo do qual o pacote vem (F1 2020)
GameMajorVersion
– A versão principal do jogo no momento da transmissão
GameMinorVersion
– A versão secundária do jogo no momento da transmissão
PacketVersion
PacketType
- O tipo de pacote desses dados (ou seja, telemetria, status, dados de volta, etc.)
UniqueSessionId
– O ID exclusivo da sua sessão.
SessioTime
– O carimbo de data/hora da sessão atual quando este pacote foi gravado e transmitido.
FrameIdentifier
- A qual agrupamento de pacotes esses dados pertencem.
PlayerCarIndex
- O índice do carro do jogador nas matrizes de campo em todos os pacotes correspondentes.
SecondaryPlayerCarIndex
- Se você estiver jogando com dois jogadores (tela dividida), este será o índice do jogador 2 na matriz de campos.
Para saber que tipo de pacote é qualquer array de bytes fornecido a você, use o CodemastersToolkit. A variável bytes
abaixo viria da sua transmissão de telemetria ou de um arquivo desserializado se você salvasse a telemetria no disco.
byte[] bytes; //Your telemetry data package
PacketType pt = CodemastersToolkit.GetPacketType(bytes);
Console.WriteLine(pt.ToString());
Saída do console acima: "CarTelemetry"
Como sabemos que este pacote de dados específico é um pacote de telemetria, podemos criar um pacote de telemetria:
TelemetryPacket tp = new TelemetryPacket();
tp.LoadBytes(bytes);
A classe TelemetryPacket
contém uma matriz de CarTelemetryData
, uma para cada carro no campo.
Por exemplo, o código abaixo irá imprimir a pressão do acelerador que cada driver está aplicando no momento em que esses dados foram transmitidos.
foreach (TelemetryPacket.CarTelemetryData ctd in tp.FieldTelemetryData)
{
Console.WriteLine(ctd.Throttle.ToString());
}
Muitos dos pacotes seguem um formato semelhante ao visto acima com o TelemetryPacket
.
Você pode converter todos os pacotes de matriz de bytes recebidos. Exemplo:
List<byte[]> telemetry;
Packet[] packets = CodemastersToolkit.BulkConvertByteArraysToPackets(telemetry);
Você pode então converter cada pacote da matriz de pacotes retornada. Por exemplo, convertendo um Packet
em TelemetryPacket
:
foreach (Packet p in packets)
{
if (p.PacketType == PacketType.CarTelemetry)
{
TelemetryPacket telpack = (TelemetryPacket)p;
}
}
Você pode precisar, por exemplo, encontrar o CarStatusPacket
que acompanha um TelemetryPacket
específico. Para fazer isso:
TelemetryPacket telpack;
CarStatusPacket csp = (CarStatusPacket)telpack.GetRelatedPacket(packets, PacketType.CarStatus);
**Se você usou anteriormente o namespace Codemasters.F1_2020.Analysis e agora está faltando: O namespace de análise foi movido para o pacote ApexVisual.F1_2020 NuGet (https://www.nuget.org/packages/ApexVisual.F1_2020/)