@rflafla/f1-udp-parser
Version:
The F1 series of games support the outputting of key game data via a UDP data stream. This data can be interpreted by external apps or connected peripherals for a range of different uses, including providing additional telemetry information, customised HU
123 lines • 5.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PacketSessionDataParser = void 0;
const binary_parser_1 = require("binary-parser");
const F1Parser_1 = require("../F1Parser");
const MarshalZoneParser_1 = require("./MarshalZoneParser");
const PacketHeaderParser_1 = require("./PacketHeaderParser");
const WeatherForecastSampleParser_1 = require("./WeatherForecastSampleParser");
class PacketSessionDataParser extends F1Parser_1.F1Parser {
data;
constructor(buffer, packetFormat) {
super();
this.endianess('little')
.nest('m_header', {
type: new PacketHeaderParser_1.PacketHeaderParser(packetFormat),
})
.uint8('m_weather')
.int8('m_trackTemperature')
.int8('m_airTemperature')
.uint8('m_totalLaps')
.uint16le('m_trackLength')
.uint8('m_sessionType')
.int8('m_trackId')
.uint8('m_formula')
.uint16le('m_sessionTimeLeft')
.uint16le('m_sessionDuration')
.uint8('m_pitSpeedLimit')
.uint8('m_gamePaused')
.uint8('m_isSpectating')
.uint8('m_spectatorCarIndex')
.uint8('m_sliProNativeSupport')
.uint8('m_numMarshalZones')
.array('m_marshalZones', { length: 21, type: new MarshalZoneParser_1.MarshalZoneParser() })
.uint8('m_safetyCarStatus')
.uint8('m_networkGame')
.uint8('m_numWeatherForecastSamples');
if (packetFormat === 2022 || packetFormat === 2023) {
this.array('m_weatherForecastSamples', {
length: 56,
type: new WeatherForecastSampleParser_1.WeatherForecastSampleParser(),
});
}
if (packetFormat >= 2024) {
this.array('m_weatherForecastSamples', {
length: 64,
type: new WeatherForecastSampleParser_1.WeatherForecastSampleParser(),
});
}
this.uint8('m_forecastAccuracy')
.uint8('m_aiDifficulty')
.uint32le('m_seasonLinkIdentifier')
.uint32le('m_weekendLinkIdentifier')
.uint32le('m_sessionLinkIdentifier')
.uint8('m_pitStopWindowIdealLap')
.uint8('m_pitStopWindowLatestLap')
.uint8('m_pitStopRejoinPosition')
.uint8('m_steeringAssist')
.uint8('m_brakingAssist')
.uint8('m_gearboxAssist')
.uint8('m_pitAssist')
.uint8('m_pitReleaseAssist')
.uint8('m_ERSAssist')
.uint8('m_DRSAssist')
.uint8('m_dynamicRacingLine')
.uint8('m_dynamicRacingLineType')
.uint8('m_gameMode')
.uint8('m_ruleSet')
.uint32le('m_timeOfDay')
.uint8('m_sessionLength');
if (packetFormat === 2023) {
this.uint8('m_speedUnitsLeadPlayer')
.uint8('m_temperatureUnitsLeadPlayer')
.uint8('m_speedUnitsSecondaryPlayer')
.uint8('m_temperatureUnitsSecondaryPlayer')
.uint8('m_numSafetyCarPeriods')
.uint8('m_numVirtualSafetyCarPeriods')
.uint8('m_numRedFlagPeriods');
}
if (packetFormat >= 2024) {
this.uint8('m_speedUnitsLeadPlayer')
.uint8('m_temperatureUnitsLeadPlayer')
.uint8('m_speedUnitsSecondaryPlayer')
.uint8('m_temperatureUnitsSecondaryPlayer')
.uint8('m_numSafetyCarPeriods')
.uint8('m_numVirtualSafetyCarPeriods')
.uint8('m_numRedFlagPeriods')
.uint8('m_equalCarPerformance')
.uint8('m_recoveryMode')
.uint8('m_flashbackLimit')
.uint8('m_surfaceType')
.uint8('m_lowFuelMode')
.uint8('m_raceStarts')
.uint8('m_tyreTemperature')
.uint8('m_pitLaneTyreSim')
.uint8('m_carDamage')
.uint8('m_carDamageRate')
.uint8('m_collisions')
.uint8('m_collisionsOffForFirstLapOnly')
.uint8('m_mpUnsafePitRelease')
.uint8('m_mpOffForGriefing')
.uint8('m_cornerCuttingStringency')
.uint8('m_parcFermeRules')
.uint8('m_pitStopExperience')
.uint8('m_safetyCar')
.uint8('m_safetyCarExperience')
.uint8('m_formationLap')
.uint8('m_formationLapExperience')
.uint8('m_redFlags')
.uint8('m_affectsLicenceLevelSolo')
.uint8('m_affectsLicenceLevelMP')
.uint8('m_numSessionsInWeekend')
.array('m_weekendStructure', {
length: 12,
type: new binary_parser_1.Parser().uint8(''),
})
.floatle('m_sector2LapDistanceStart')
.floatle('m_sector3LapDistanceStart');
}
this.data = this.fromBuffer(buffer);
}
}
exports.PacketSessionDataParser = PacketSessionDataParser;
//# sourceMappingURL=PacketSessionDataParser.js.map