Skip to content

Commit 92d18c3

Browse files
committed
small tweaks to relative
1 parent 9726cdf commit 92d18c3

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

src/frontend/components/Standings/createStandings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export interface Standings {
3030
color: number;
3131
name: string;
3232
relativeSpeed: number;
33+
estLapTime: number;
3334
};
3435
radioActive?: boolean;
3536
}
@@ -125,6 +126,7 @@ export const createDriverStandings = (
125126
color: driver.CarClassColor,
126127
name: driver.CarClassShortName,
127128
relativeSpeed: driver.CarClassRelSpeed,
129+
estLapTime: driver.CarClassEstLapTime,
128130
},
129131
radioActive: telemetry.radioTransmitCarIdx?.includes(result.CarIdx),
130132
};

src/frontend/components/Standings/hooks/useDriverRelatives.tsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,29 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
1212
const carIdxLapDistPct = useTelemetryValues('CarIdxLapDistPct');
1313

1414
const playerIndex = useDriverCarIdx();
15-
const driverCarEstLapTime = useSessionStore(
16-
(s) => s.session?.DriverInfo?.DriverCarEstLapTime ?? 0
17-
);
15+
const player = drivers.find((d) => d.carIdx === playerIndex);
16+
17+
if (!player) {
18+
return [];
19+
}
20+
21+
const driverEstLapTime = player.carClass.estLapTime ?? 0;
1822

1923
const standings = useMemo(() => {
20-
const calculateDelta = (carIdx: number) => {
24+
const calculateDelta = (carIdx: number, isAhead: boolean) => {
2125
const playerEstTime = carIdxEstTime?.[playerIndex ?? 0];
2226
const oppositionEstTime = carIdxEstTime?.[carIdx];
2327
let delta = oppositionEstTime - playerEstTime;
2428

25-
while (delta < -0.5 * driverCarEstLapTime) delta += driverCarEstLapTime;
26-
while (delta > 0.5 * driverCarEstLapTime) delta -= driverCarEstLapTime;
29+
if (isAhead) {
30+
// For cars ahead, ensure positive delta within half a lap
31+
while (delta < 0) delta += driverEstLapTime;
32+
while (delta > 0.5 * driverEstLapTime) delta -= driverEstLapTime;
33+
} else {
34+
// For cars behind, ensure negative delta within half a lap
35+
while (delta > 0) delta -= driverEstLapTime;
36+
while (delta < -0.5 * driverEstLapTime) delta += driverEstLapTime;
37+
}
2738

2839
return delta;
2940
};
@@ -45,22 +56,17 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
4556
})
4657
.map((result) => ({
4758
...result,
48-
delta: calculateDelta(result.carIdx),
59+
delta: calculateDelta(result.carIdx, isAhead),
4960
}))
5061
.filter((result) => (isAhead ? result.delta > 0 : result.delta < 0))
5162
.sort((a, b) => (isAhead ? a.delta - b.delta : b.delta - a.delta))
52-
.slice(0, buffer) // slice from rear to front if isAhead
63+
.slice(0, buffer)
5364
.sort((a, b) => b.delta - a.delta);
5465
};
5566

5667
const carsAhead = filterAndMapDrivers(true);
57-
const player = drivers.find((result) => result.carIdx === playerIndex);
5868
const carsBehind = filterAndMapDrivers(false);
5969

60-
if (!player) {
61-
return [];
62-
}
63-
6470
const relatives = [...carsAhead, { ...player, delta: 0 }, ...carsBehind];
6571

6672
// TODO: remove pace car if not under caution or pacing
@@ -71,8 +77,8 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
7177
buffer,
7278
carIdxEstTime,
7379
playerIndex,
74-
driverCarEstLapTime,
7580
carIdxLapDistPct,
81+
driverEstLapTime,
7682
]);
7783

7884
return standings;

0 commit comments

Comments
 (0)