@ -73,16 +73,15 @@ static void ui_draw_circle_image(const UIState *s, int center_x, int center_y, i 
			
		
	
		
		
			
				
					
					  ui_draw_circle_image ( s ,  center_x ,  center_y ,  radius ,  image ,  nvgRGBA ( 0 ,  0 ,  0 ,  ( 255  *  bg_alpha ) ) ,  img_alpha ) ;    ui_draw_circle_image ( s ,  center_x ,  center_y ,  radius ,  image ,  nvgRGBA ( 0 ,  0 ,  0 ,  ( 255  *  bg_alpha ) ) ,  img_alpha ) ;   
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  draw_lead ( UIState  * s ,  int  idx )  { static  void  draw_lead ( UIState  * s ,  const  cereal : : RadarState : : LeadData : : Reader  & lead_data ,  const  vertex_data  & vd )  {  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					  // Draw lead car indicator
    // Draw lead car indicator
   
			
		
	
		
		
			
				
					
					  const  auto  & lead  =  s - > scene . lead_data [ idx ] ;    auto  [ x ,  y ]  =  vd ;   
			
				
				
			
		
	
		
		
			
				
					
					  auto  [ x ,  y ]  =  s - > scene . lead_vertices [ idx ] ;   
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  float  fillAlpha  =  0 ;    float  fillAlpha  =  0 ;   
			
		
	
		
		
			
				
					
					  float  speedBuff  =  10. ;    float  speedBuff  =  10. ;   
			
		
	
		
		
			
				
					
					  float  leadBuff  =  40. ;    float  leadBuff  =  40. ;   
			
		
	
		
		
			
				
					
					  float  d_rel  =  lead . getDRel ( ) ;    float  d_rel  =  lead_data  . getDRel ( ) ;   
			
				
				
			
		
	
		
		
			
				
					
					  float  v_rel  =  lead . getVRel ( ) ;    float  v_rel  =  lead_data  . getVRel ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					  if  ( d_rel  <  leadBuff )  {    if  ( d_rel  <  leadBuff )  {   
			
		
	
		
		
			
				
					
					    fillAlpha  =  255 * ( 1.0 - ( d_rel / leadBuff ) ) ;      fillAlpha  =  255 * ( 1.0 - ( d_rel / leadBuff ) ) ;   
			
		
	
		
		
			
				
					
					    if  ( v_rel  <  0 )  {      if  ( v_rel  <  0 )  {   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -173,7 +172,6 @@ static void ui_draw_vision_lane_lines(UIState *s) { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					// Draw all world space objects.
 // Draw all world space objects.
  
			
		
	
		
		
			
				
					
					static  void  ui_draw_world ( UIState  * s )  { static  void  ui_draw_world ( UIState  * s )  {  
			
		
	
		
		
			
				
					
					  const  UIScene  * scene  =  & s - > scene ;   
			
		
	
		
		
			
				
					
					  // Don't draw on top of sidebar
    // Don't draw on top of sidebar
   
			
		
	
		
		
			
				
					
					  nvgScissor ( s - > vg ,  s - > viz_rect . x ,  s - > viz_rect . y ,  s - > viz_rect . w ,  s - > viz_rect . h ) ;    nvgScissor ( s - > vg ,  s - > viz_rect . x ,  s - > viz_rect . y ,  s - > viz_rect . w ,  s - > viz_rect . h ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -182,11 +180,14 @@ static void ui_draw_world(UIState *s) { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  // Draw lead indicators if openpilot is handling longitudinal
    // Draw lead indicators if openpilot is handling longitudinal
   
			
		
	
		
		
			
				
					
					  if  ( s - > scene . longitudinal_control )  {    if  ( s - > scene . longitudinal_control )  {   
			
		
	
		
		
			
				
					
					    if  ( scene - > lead_data [ 0 ] . getStatus ( ) )  {      auto  radar_state  =  ( * s - > sm ) [ " radarState " ] . getRadarState ( ) ;   
			
				
				
			
		
	
		
		
			
				
					
					      draw_lead ( s ,  0 ) ;      auto  lead_one  =  radar_state . getLeadOne ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					    auto  lead_two  =  radar_state . getLeadTwo ( ) ;   
			
		
	
		
		
			
				
					
					    if  ( lead_one . getStatus ( ) )  {   
			
		
	
		
		
			
				
					
					      draw_lead ( s ,  lead_one ,  s - > scene . lead_vertices [ 0 ] ) ;   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					    if  ( scene - > lead_data [ 1 ] . getStatus ( )  & &  ( std : : abs ( scene - > lead_data [ 0 ] . getDRel ( )  -  scene - > lead_data [ 1 ] . getDRel ( ) )  >  3.0 ) )  {      if  ( lead_two . getStatus ( )  & &  ( std : : abs ( lead_one . getDRel ( )  -  lead_two . getDRel ( ) )  >  3.0 ) )  {   
			
				
				
			
		
	
		
		
			
				
					
					      draw_lead ( s ,  1 ) ;        draw_lead ( s ,  lead_two ,  s - > scene . lead_vertices [ 1 ] ) ;   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					  }    }   
			
		
	
		
		
			
				
					
					  nvgResetScissor ( s - > vg ) ;    nvgResetScissor ( s - > vg ) ;   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -194,7 +195,7 @@ static void ui_draw_world(UIState *s) { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  ui_draw_vision_maxspeed ( UIState  * s )  { static  void  ui_draw_vision_maxspeed ( UIState  * s )  {  
			
		
	
		
		
			
				
					
					  const  int  SET_SPEED_NA  =  255 ;    const  int  SET_SPEED_NA  =  255 ;   
			
		
	
		
		
			
				
					
					  float  maxspeed  =  s - > scene . controls_state  . getVCruise ( ) ;    float  maxspeed  =  ( * s - > sm ) [ " controlsState " ] . getControlsState ( )  . getVCruise ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					  const  bool  is_cruise_set  =  maxspeed  ! =  0  & &  maxspeed  ! =  SET_SPEED_NA ;    const  bool  is_cruise_set  =  maxspeed  ! =  0  & &  maxspeed  ! =  SET_SPEED_NA ;   
			
		
	
		
		
			
				
					
					  if  ( is_cruise_set  & &  ! s - > scene . is_metric )  {  maxspeed  * =  0.6225 ;  }    if  ( is_cruise_set  & &  ! s - > scene . is_metric )  {  maxspeed  * =  0.6225 ;  }   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -213,7 +214,7 @@ static void ui_draw_vision_maxspeed(UIState *s) { 
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  ui_draw_vision_speed ( UIState  * s )  { static  void  ui_draw_vision_speed ( UIState  * s )  {  
			
		
	
		
		
			
				
					
					  const  float  speed  =  std : : max ( 0.0 ,  s - > scene . car_state  . getVEgo ( )  *  ( s - > scene . is_metric  ?  3.6  :  2.2369363 ) ) ;    const  float  speed  =  std : : max ( 0.0 ,  ( * s - > sm ) [ " carState " ] . getCarState ( )  . getVEgo ( )  *  ( s - > scene . is_metric  ?  3.6  :  2.2369363 ) ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					  const  std : : string  speed_str  =  std : : to_string ( ( int ) std : : nearbyint ( speed ) ) ;    const  std : : string  speed_str  =  std : : to_string ( ( int ) std : : nearbyint ( speed ) ) ;   
			
		
	
		
		
			
				
					
					  nvgTextAlign ( s - > vg ,  NVG_ALIGN_CENTER  |  NVG_ALIGN_BASELINE ) ;    nvgTextAlign ( s - > vg ,  NVG_ALIGN_CENTER  |  NVG_ALIGN_BASELINE ) ;   
			
		
	
		
		
			
				
					
					  ui_draw_text ( s ,  s - > viz_rect . centerX ( ) ,  240 ,  speed_str . c_str ( ) ,  96  *  2.5 ,  COLOR_WHITE ,  " sans-bold " ) ;    ui_draw_text ( s ,  s - > viz_rect . centerX ( ) ,  240 ,  speed_str . c_str ( ) ,  96  *  2.5 ,  COLOR_WHITE ,  " sans-bold " ) ;   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -221,7 +222,7 @@ static void ui_draw_vision_speed(UIState *s) { 
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  ui_draw_vision_event ( UIState  * s )  { static  void  ui_draw_vision_event ( UIState  * s )  {  
			
		
	
		
		
			
				
					
					  if  ( s - > scene . controls_state  . getEngageable ( ) )  {    if  ( ( * s - > sm ) [ " controlsState " ] . getControlsState ( )  . getEngageable ( ) )  {   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    // draw steering wheel
      // draw steering wheel
   
			
		
	
		
		
			
				
					
					    const  int  radius  =  96 ;      const  int  radius  =  96 ;   
			
		
	
		
		
			
				
					
					    const  int  center_x  =  s - > viz_rect . right ( )  -  radius  -  bdr_s  *  2 ;      const  int  center_x  =  s - > viz_rect . right ( )  -  radius  -  bdr_s  *  2 ;   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -234,7 +235,8 @@ static void ui_draw_vision_face(UIState *s) { 
			
		
	
		
		
			
				
					
					  const  int  radius  =  96 ;    const  int  radius  =  96 ;   
			
		
	
		
		
			
				
					
					  const  int  center_x  =  s - > viz_rect . x  +  radius  +  ( bdr_s  *  2 ) ;    const  int  center_x  =  s - > viz_rect . x  +  radius  +  ( bdr_s  *  2 ) ;   
			
		
	
		
		
			
				
					
					  const  int  center_y  =  s - > viz_rect . bottom ( )  -  footer_h  /  2 ;    const  int  center_y  =  s - > viz_rect . bottom ( )  -  footer_h  /  2 ;   
			
		
	
		
		
			
				
					
					  ui_draw_circle_image ( s ,  center_x ,  center_y ,  radius ,  " driver_face " ,  s - > scene . dmonitoring_state . getIsActiveMode ( ) ) ;    bool  is_active  =  ( * s - > sm ) [ " driverMonitoringState " ] . getDriverMonitoringState ( ) . getIsActiveMode ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					  ui_draw_circle_image ( s ,  center_x ,  center_y ,  radius ,  " driver_face " ,  is_active ) ;   
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  ui_draw_driver_view ( UIState  * s )  { static  void  ui_draw_driver_view ( UIState  * s )  {  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -252,9 +254,10 @@ static void ui_draw_driver_view(UIState *s) { 
			
		
	
		
		
			
				
					
					  ui_fill_rect ( s - > vg ,  { blackout_x_l ,  rect . y ,  blackout_w_l ,  rect . h } ,  COLOR_BLACK_ALPHA ( 144 ) ) ;    ui_fill_rect ( s - > vg ,  { blackout_x_l ,  rect . y ,  blackout_w_l ,  rect . h } ,  COLOR_BLACK_ALPHA ( 144 ) ) ;   
			
		
	
		
		
			
				
					
					  ui_fill_rect ( s - > vg ,  { blackout_x_r ,  rect . y ,  blackout_w_r ,  rect . h } ,  COLOR_BLACK_ALPHA ( 144 ) ) ;    ui_fill_rect ( s - > vg ,  { blackout_x_r ,  rect . y ,  blackout_w_r ,  rect . h } ,  COLOR_BLACK_ALPHA ( 144 ) ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  const  bool  face_detected  =  s - > scene . driver_state . getFaceProb ( )  >  0.4 ;    auto  driver_state  =  ( * s - > sm ) [ " driverState " ] . getDriverState ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					  const  bool  face_detected  =  driver_state . getFaceProb ( )  >  0.4 ;   
			
		
	
		
		
			
				
					
					  if  ( face_detected )  {    if  ( face_detected )  {   
			
		
	
		
		
			
				
					
					    auto  fxy_list  =  s - > scene . driver_state . getFacePosition ( ) ;      auto  fxy_list  =  driver_state . getFacePosition ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    float  face_x  =  fxy_list [ 0 ] ;      float  face_x  =  fxy_list [ 0 ] ;   
			
		
	
		
		
			
				
					
					    float  face_y  =  fxy_list [ 1 ] ;      float  face_y  =  fxy_list [ 1 ] ;   
			
		
	
		
		
			
				
					
					    int  fbox_x  =  valid_rect . centerX ( )  +  ( is_rhd  ?  face_x  :  - face_x )  *  valid_rect . w ;      int  fbox_x  =  valid_rect . centerX ( )  +  ( is_rhd  ?  face_x  :  - face_x )  *  valid_rect . w ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -308,7 +311,7 @@ static void ui_draw_vision(UIState *s) { 
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					    // Set Speed, Current Speed, Status/Events
      // Set Speed, Current Speed, Status/Events
   
			
		
	
		
		
			
				
					
					    ui_draw_vision_header ( s ) ;      ui_draw_vision_header ( s ) ;   
			
		
	
		
		
			
				
					
					    if  ( s - > scene . controls_state  . getAlertSize ( )  = =  cereal : : ControlsState : : AlertSize : : NONE )  {      if  ( ( * s - > sm ) [ " controlsState " ] . getControlsState ( )  . getAlertSize ( )  = =  cereal : : ControlsState : : AlertSize : : NONE )  {   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					      ui_draw_vision_face ( s ) ;        ui_draw_vision_face ( s ) ;   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					  }  else  {    }  else  {