11import  {  useMemo  }  from  'react' ; 
22import  { 
33  useDriverCarIdx , 
4-   useSessionStore , 
54  useTelemetryValues , 
65}  from  '@irdashies/context' ; 
76import  {  useDriverStandings  }  from  './useDriverPositions' ; 
@@ -10,28 +9,33 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
109  const  carIdxEstTime  =  useTelemetryValues ( 'CarIdxEstTime' ) ; 
1110  const  drivers  =  useDriverStandings ( ) ; 
1211  const  carIdxLapDistPct  =  useTelemetryValues ( 'CarIdxLapDistPct' ) ; 
13- 
1412  const  playerIndex  =  useDriverCarIdx ( ) ; 
15-   const  player  =  drivers . find ( ( d )  =>  d . carIdx  ===  playerIndex ) ; 
1613
17-   if  ( ! player )  { 
18-     return  [ ] ; 
19-   } 
14+   const  standings  =  useMemo ( ( )  =>  { 
15+     const  player  =  drivers . find ( ( d )  =>  d . carIdx  ===  playerIndex ) ; 
16+     if  ( ! player )  { 
17+       return  [ ] ; 
18+     } 
2019
21-   const  driverEstLapTime  =  player . carClass . estLapTime  ??  0 ; 
20+      const  driverEstLapTime  =  player . carClass . estLapTime  ??  0 ; 
2221
23-   const  standings  =  useMemo ( ( )  =>  { 
2422    const  calculateDelta  =  ( carIdx : number ,  isAhead : boolean )  =>  { 
2523      const  playerEstTime  =  carIdxEstTime ?. [ playerIndex  ??  0 ] ; 
2624      const  oppositionEstTime  =  carIdxEstTime ?. [ carIdx ] ; 
27-       let  delta  =  oppositionEstTime  -  playerEstTime ; 
25+       const  opposition  =  drivers . find ( ( d )  =>  d . carIdx  ===  carIdx ) ; 
26+       
27+       if  ( ! opposition )  { 
28+         return  0 ; 
29+       } 
30+ 
31+       let  delta  =  ( oppositionEstTime  -  playerEstTime ) ; 
2832
2933      if  ( isAhead )  { 
30-         // For cars ahead, ensure positive delta within half a  lap 
34+         // For cars ahead, use their lap time since they determine the full  lap duration  
3135        while  ( delta  <  0 )  delta  +=  driverEstLapTime ; 
3236        while  ( delta  >  0.5  *  driverEstLapTime )  delta  -=  driverEstLapTime ; 
3337      }  else  { 
34-         // For cars behind, ensure negative delta within half a  lap 
38+         // For cars behind, use player's lap time since we're measuring against our  lap 
3539        while  ( delta  >  0 )  delta  -=  driverEstLapTime ; 
3640        while  ( delta  <  - 0.5  *  driverEstLapTime )  delta  +=  driverEstLapTime ; 
3741      } 
@@ -72,14 +76,7 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
7276    // TODO: remove pace car if not under caution or pacing 
7377
7478    return  relatives ; 
75-   } ,  [ 
76-     drivers , 
77-     buffer , 
78-     carIdxEstTime , 
79-     playerIndex , 
80-     carIdxLapDistPct , 
81-     driverEstLapTime , 
82-   ] ) ; 
79+   } ,  [ drivers ,  buffer ,  carIdxEstTime ,  playerIndex ,  carIdxLapDistPct ] ) ; 
8380
8481  return  standings ; 
8582} ; 
0 commit comments