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