Skip to content

Commit

Permalink
car damage parser
Browse files Browse the repository at this point in the history
  • Loading branch information
PrimeGoose committed Jun 30, 2022
1 parent 9218c86 commit d67c956
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/F1_22_UDP.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {PacketParticipantsParser} from './parsers/Participants/parsers';
import {PacketSessionDataParser} from './parsers/Session/parsers';
import {PacketFinalClassificationDataParser} from './parsers/FinalClassification/parsers';
import {PacketLobbyInfoDataParser} from './parsers/lobby/parsers';
import {PacketCarDamageDataParser} from './parsers/CarDamage/parsers';

const DEFAULT_PORT = 20777;
const ADDRESS = 'localhost';
Expand Down Expand Up @@ -132,7 +133,12 @@ export class F122UDP extends EventEmitter {
}
break;
case packetSize.CarDamage:
// console.log("CarDamage"); // ok
{
// console.log("CarDamage"); // ok
const {data} = new PacketCarDamageDataParser(msg, true);
this.emit('carDamage', data);
// console.log(data);
}
break;
case packetSize.SessionHistory:
// console.log("SessionHistory");
Expand Down
39 changes: 39 additions & 0 deletions src/parsers/CarDamage/CarDamage.spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Car Damage Packet

This packet details car damage parameters for all the cars in the race.

Frequency: 2 per second
Size: 948 bytes
Version: 1

struct CarDamageData
{
float m_tyresWear[4]; // Tyre wear (percentage)
uint8 m_tyresDamage[4]; // Tyre damage (percentage)
uint8 m_brakesDamage[4]; // Brakes damage (percentage)
uint8 m_frontLeftWingDamage; // Front left wing damage (percentage)
uint8 m_frontRightWingDamage; // Front right wing damage (percentage)
uint8 m_rearWingDamage; // Rear wing damage (percentage)
uint8 m_floorDamage; // Floor damage (percentage)
uint8 m_diffuserDamage; // Diffuser damage (percentage)
uint8 m_sidepodDamage; // Sidepod damage (percentage)
uint8 m_drsFault; // Indicator for DRS fault, 0 = OK, 1 = fault
uint8 m_ersFault; // Indicator for ERS fault, 0 = OK, 1 = fault
uint8 m_gearBoxDamage; // Gear box damage (percentage)
uint8 m_engineDamage; // Engine damage (percentage)
uint8 m_engineMGUHWear; // Engine wear MGU-H (percentage)
uint8 m_engineESWear; // Engine wear ES (percentage)
uint8 m_engineCEWear; // Engine wear CE (percentage)
uint8 m_engineICEWear; // Engine wear ICE (percentage)
uint8 m_engineMGUKWear; // Engine wear MGU-K (percentage)
uint8 m_engineTCWear; // Engine wear TC (percentage)
uint8 m_engineBlown; // Engine blown, 0 = OK, 1 = fault
uint8 m_engineSeized; // Engine seized, 0 = OK, 1 = fault
}

struct PacketCarDamageData
{
PacketHeader m_header; // Header

CarDamageData m_carDamageData[22];
};
50 changes: 50 additions & 0 deletions src/parsers/CarDamage/parsers/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import {Parser} from 'binary-parser';
import {PacketCarDamageData} from 'CarDamage/types';
import {PacketHeaderParser} from '../../PacketHeader/parser';

import {F1Parser} from '../../f1.parser';

export class CarDamageDataParser extends F1Parser {
constructor() {
super();
this.array('m_tyresWear', {length: 4, type: new Parser().floatle('')})
.array('m_tyresDamage', {length: 4, type: new Parser().uint8('')})
.array('m_brakesDamage', {length: 4, type: new Parser().uint8('')})
.uint8('m_frontLeftWingDamage')
.uint8('m_frontRightWingDamage')
.uint8('m_rearWingDamage')
.uint8('m_floorDamage')
.uint8('m_diffuserDamage')
.uint8('m_sidepodDamage')
.uint8('m_drsFault')
.uint8('m_ersFault')
.uint8('m_gearBoxDamage')
.uint8('m_engineDamage')
.uint8('m_engineMGUHWear')
.uint8('m_engineESWear')
.uint8('m_engineCEWear')
.uint8('m_engineICEWear')
.uint8('m_engineMGUKWear')
.uint8('m_engineTCWear')
.uint8('m_engineBlown')
.uint8('m_engineSeized');
}
}

export class PacketCarDamageDataParser extends F1Parser {
data: PacketCarDamageData;

constructor(buffer: Buffer, bigintEnabled: boolean) {
super();
this.endianess('little')
.nest('m_header', {
type: new PacketHeaderParser(bigintEnabled),
})
.array('m_carDamageData', {
length: 22,
type: new CarDamageDataParser(),
});

this.data = this.fromBuffer(buffer) as PacketCarDamageData;
}
}
63 changes: 63 additions & 0 deletions src/parsers/CarDamage/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import {PacketHeader} from '../../PacketHeader/types';

/*
struct CarDamageData
{
float m_tyresWear[4]; // Tyre wear (percentage)
uint8 m_tyresDamage[4]; // Tyre damage (percentage)
uint8 m_brakesDamage[4]; // Brakes damage (percentage)
uint8 m_frontLeftWingDamage; // Front left wing damage (percentage)
uint8 m_frontRightWingDamage; // Front right wing damage (percentage)
uint8 m_rearWingDamage; // Rear wing damage (percentage)
uint8 m_floorDamage; // Floor damage (percentage)
uint8 m_diffuserDamage; // Diffuser damage (percentage)
uint8 m_sidepodDamage; // Sidepod damage (percentage)
uint8 m_drsFault; // Indicator for DRS fault, 0 = OK, 1 = fault
+ uint8 m_ersFault; // Indicator for ERS fault, 0 = OK, 1 = fault
uint8 m_gearBoxDamage; // Gear box damage (percentage)
uint8 m_engineDamage; // Engine damage (percentage)
uint8 m_engineMGUHWear; // Engine wear MGU-H (percentage)
uint8 m_engineESWear; // Engine wear ES (percentage)
uint8 m_engineCEWear; // Engine wear CE (percentage)
uint8 m_engineICEWear; // Engine wear ICE (percentage)
uint8 m_engineMGUKWear; // Engine wear MGU-K (percentage)
uint8 m_engineTCWear; // Engine wear TC (percentage)
+ uint8 m_engineBlown; // Engine blown, 0 = OK, 1 = fault
+ uint8 m_engineSeized; // Engine seized, 0 = OK, 1 = fault
}
*/
export interface CarDamageData {
m_tyresWear: number[];
m_tyresDamage: number[];
m_brakesDamage: number[];
m_frontLeftWingDamage: number;
m_frontRightWingDamage: number;
m_rearWingDamage: number;
m_floorDamage: number;
m_diffuserDamage: number;
m_sidepodDamage: number;
m_drsFault: number;
m_ersFault: number;
m_gearBoxDamage: number;
m_engineDamage: number;
m_engineMGUHWear: number;
m_engineESWear: number;
m_engineCEWear: number;
m_engineICEWear: number;
m_engineMGUKWear: number;
m_engineTCWear: number;
m_engineBlown: number;
m_engineSeized: number;
}

/*
struct PacketCarDamageData
{
PacketHeader m_header; // Header
CarDamageData m_carDamageData[22];
};
*/
export interface PacketCarDamageData {
m_header: PacketHeader;
m_carDamageData: CarDamageData[];
}

0 comments on commit d67c956

Please sign in to comment.