@@ -45,7 +45,7 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
4545
4646      const  player  =  drivers . find ( ( driver )  =>  driver . carIdx  ===  playerIndex ) ; 
4747      const  other  =  drivers . find ( ( driver )  =>  driver . carIdx  ===  otherCarIdx ) ; 
48-        
48+ 
4949      // Use the slower car's lap time for more conservative deltas in multiclass 
5050      const  playerEstLapTime  =  player ?. carClass ?. estLapTime  ??  0 ; 
5151      const  otherEstLapTime  =  other ?. carClass ?. estLapTime  ??  0 ; 
@@ -64,38 +64,42 @@ export const useDriverRelatives = ({ buffer }: { buffer: number }) => {
6464      return  timeDelta ; 
6565    } ; 
6666
67-     const  filterAndMapDrivers  =  ( )  =>  { 
68-       return  drivers 
69-         . filter ( ( driver )  =>  driver . onTrack  ||  driver . carIdx  ===  playerIndex )  // filter out drivers not on track 
70-         . filter ( ( driver )  =>  driver . carIdx  >  - 1  &&  driver . carIdx  !==  paceCarIdx )  // filter out pace car 
71-         . map ( ( result )  =>  ( { 
72-           ...result , 
73-           relativePct : calculateRelativePct ( result . carIdx ) , 
74-         } ) ) 
75-         . filter ( ( result )  =>  ! isNaN ( result . relativePct ) ) 
76-         . sort ( ( a ,  b )  =>  b . relativePct  -  a . relativePct )  // sort by relative pct 
77-         . map ( ( result )  =>  ( { 
67+     const  sortedDrivers  =  drivers 
68+       . filter ( ( driver )  =>  driver . onTrack  ||  driver . carIdx  ===  playerIndex )  // filter out drivers not on track 
69+       . filter ( ( driver )  =>  driver . carIdx  >  - 1  &&  driver . carIdx  !==  paceCarIdx )  // filter out pace car 
70+       . map ( ( result )  =>  { 
71+         const  relativePct  =  calculateRelativePct ( result . carIdx ) ; 
72+         return  { 
7873          ...result , 
74+           relativePct, 
7975          delta : calculateDelta ( result . carIdx ) , 
80-         } ) ) 
81-          . filter ( ( result )   =>   ! isNaN ( result . delta ) ) ; 
82-     } ; 
76+         } ; 
77+       } ) 
78+        . filter ( ( result )   =>   ! isNaN ( result . relativePct )   &&   ! isNaN ( result . delta ) ) ; 
8379
84-     const  allRelatives  =  filterAndMapDrivers ( ) ; 
85-     const  playerArrIndex  =  allRelatives . findIndex ( 
86-       ( result )  =>  result . carIdx  ===  playerIndex 
80+     const  playerArrIndex  =  sortedDrivers . findIndex ( 
81+       ( result )  =>  result . carIdx  ===  playerIndex , 
8782    ) ; 
8883
8984    // if the player is not in the list, return an empty array 
9085    if  ( playerArrIndex  ===  - 1 )  { 
9186      return  [ ] ; 
9287    } 
9388
94-     // buffered slice to get only the drivers around the player 
95-     const  start  =  Math . max ( 0 ,  playerArrIndex  -  buffer ) ; 
96-     const  end  =  Math . min ( allRelatives . length ,  playerArrIndex  +  buffer  +  1 ) ; 
89+     const  player  =  sortedDrivers [ playerArrIndex ] ; 
90+ 
91+     const  driversAhead  =  sortedDrivers 
92+       . filter ( ( d )  =>  d . relativePct  >  0 ) 
93+       . sort ( ( a ,  b )  =>  a . relativePct  -  b . relativePct )  // sort ascending (closest to player first) 
94+       . slice ( 0 ,  buffer ) 
95+       . reverse ( ) ;  // reverse to get furthest to closest for display 
96+ 
97+     const  driversBehind  =  sortedDrivers 
98+       . filter ( ( d )  =>  d . relativePct  <  0 ) 
99+       . sort ( ( a ,  b )  =>  b . relativePct  -  a . relativePct )  // sort descending (closest to player first) 
100+       . slice ( 0 ,  buffer ) ; 
97101
98-     return  allRelatives . slice ( start ,   end ) ; 
102+     return  [ ... driversAhead ,   player ,  ... driversBehind ] ; 
99103  } ,  [ buffer ,  playerIndex ,  carIdxLapDistPct ,  drivers ,  paceCarIdx ] ) ; 
100104
101105  return  standings ; 
0 commit comments