Skip to content

Commit 470fd77

Browse files
committed
apply possible fix
1 parent 407eaa6 commit 470fd77

File tree

1 file changed

+43
-27
lines changed

1 file changed

+43
-27
lines changed
Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,56 @@
11
import { useMemo } from 'react';
22
import {
33
useDriverCarIdx,
4+
useSessionStore,
45
useTelemetryValues,
56
} from '@irdashies/context';
67
import { useDriverStandings } from './useDriverPositions';
78

89
export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
9-
const carIdxEstTime = useTelemetryValues('CarIdxEstTime');
1010
const drivers = useDriverStandings();
1111
const carIdxLapDistPct = useTelemetryValues('CarIdxLapDistPct');
12+
const carIdxLap = useTelemetryValues('CarIdxLap');
13+
1214
const playerIndex = useDriverCarIdx();
15+
const driverCarEstLapTime = useSessionStore(
16+
(s) => s.session?.DriverInfo?.DriverCarEstLapTime ?? 0
17+
);
1318

1419
const standings = useMemo(() => {
15-
const player = drivers.find((d) => d.carIdx === playerIndex);
16-
if (!player) {
17-
return [];
18-
}
20+
const calculateDelta = (otherCarIdx: number) => {
21+
const playerCarIdx = playerIndex ?? 0;
1922

20-
const driverEstLapTime = player.carClass.estLapTime ?? 0;
23+
const playerLapNum = carIdxLap?.[playerCarIdx];
24+
const playerDistPct = carIdxLapDistPct?.[playerCarIdx];
2125

22-
const calculateDelta = (carIdx: number, isAhead: boolean) => {
23-
const playerEstTime = carIdxEstTime?.[playerIndex ?? 0];
24-
const oppositionEstTime = carIdxEstTime?.[carIdx];
25-
const opposition = drivers.find((d) => d.carIdx === carIdx);
26+
const otherLapNum = carIdxLap?.[otherCarIdx];
27+
const otherDistPct = carIdxLapDistPct?.[otherCarIdx];
2628

27-
if (!opposition) {
28-
return 0;
29+
if (
30+
playerLapNum === undefined || playerLapNum < 0 ||
31+
playerDistPct === undefined || playerDistPct < 0 || playerDistPct > 1 ||
32+
otherLapNum === undefined || otherLapNum < 0 ||
33+
otherDistPct === undefined || otherDistPct < 0 || otherDistPct > 1 ||
34+
driverCarEstLapTime <= 0
35+
) {
36+
return NaN;
2937
}
3038

31-
let delta = (oppositionEstTime - playerEstTime);
39+
let distPctDifference = otherDistPct - playerDistPct;
3240

33-
if (isAhead) {
34-
// For cars ahead, use their lap time since they determine the full lap duration
35-
while (delta < 0) delta += driverEstLapTime;
36-
while (delta > 0.5 * driverEstLapTime) delta -= driverEstLapTime;
37-
} else {
38-
// For cars behind, use player's lap time since we're measuring against our lap
39-
while (delta > 0) delta -= driverEstLapTime;
40-
while (delta < -0.5 * driverEstLapTime) delta += driverEstLapTime;
41+
if (distPctDifference > 0.5) {
42+
distPctDifference -= 1.0;
43+
} else if (distPctDifference < -0.5) {
44+
distPctDifference += 1.0;
4145
}
46+
47+
const timeDelta = distPctDifference * driverCarEstLapTime;
4248

43-
return delta;
49+
return timeDelta;
4450
};
4551

4652
const isHalfLapDifference = (car1: number, car2: number) => {
47-
const diff = (car1 - car2 + 1) % 1; // Normalize the difference to [0, 1)
53+
const diff = (car1 - car2 + 1) % 1;
4854
return diff <= 0.5;
4955
};
5056

@@ -60,7 +66,7 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
6066
})
6167
.map((result) => ({
6268
...result,
63-
delta: calculateDelta(result.carIdx, isAhead),
69+
delta: calculateDelta(result.carIdx),
6470
}))
6571
.filter((result) => (isAhead ? result.delta > 0 : result.delta < 0))
6672
.sort((a, b) => (isAhead ? a.delta - b.delta : b.delta - a.delta))
@@ -69,14 +75,24 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
6975
};
7076

7177
const carsAhead = filterAndMapDrivers(true);
78+
const player = drivers.find((result) => result.carIdx === playerIndex);
7279
const carsBehind = filterAndMapDrivers(false);
7380

74-
const relatives = [...carsAhead, { ...player, delta: 0 }, ...carsBehind];
81+
if (!player) {
82+
return [];
83+
}
7584

76-
// TODO: remove pace car if not under caution or pacing
85+
const relatives = [...carsAhead, { ...player, delta: 0 }, ...carsBehind];
7786

7887
return relatives;
79-
}, [drivers, buffer, carIdxEstTime, playerIndex, carIdxLapDistPct]);
88+
}, [
89+
drivers,
90+
buffer,
91+
playerIndex,
92+
driverCarEstLapTime,
93+
carIdxLapDistPct,
94+
carIdxLap,
95+
]);
8096

8197
return standings;
8298
};

0 commit comments

Comments
 (0)