@@ -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