|  |  | @ -247,16 +247,6 @@ static void ui_draw_track(UIState *s, bool is_mpc, track_vertices_data *pvd) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   nvgFill(s->vg); |  |  |  |   nvgFill(s->vg); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void draw_steering(UIState *s, float curvature) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   float points[50]; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   for (int i = 0; i < 50; i++) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     float y_actual = i * tan(asin(clamp(i * curvature, -0.999, 0.999)) / 2.); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     points[i] = y_actual; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   // ui_draw_lane_edge(s, points, 0.0, nvgRGBA(0, 0, 255, 128), 5);
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | static void draw_frame(UIState *s) { |  |  |  | static void draw_frame(UIState *s) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   const UIScene *scene = &s->scene; |  |  |  |   const UIScene *scene = &s->scene; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -298,9 +288,10 @@ static inline bool valid_frame_pt(UIState *s, float x, float y) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   return x >= 0 && x <= s->rgb_width && y >= 0 && y <= s->rgb_height; |  |  |  |   return x >= 0 && x <= s->rgb_width && y >= 0 && y <= s->rgb_height; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | static void update_lane_line_data(UIState *s, const float *points, float off, bool is_ghost, model_path_vertices_data *pvd) { |  |  |  | static void update_lane_line_data(UIState *s, const float *points, float off, bool is_ghost, model_path_vertices_data *pvd, float valid_len) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   pvd->cnt = 0; |  |  |  |   pvd->cnt = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |   for (int i = 0; i < MODEL_PATH_MAX_VERTICES_CNT / 2; i++) { |  |  |  |   int rcount = fmin(MODEL_PATH_MAX_VERTICES_CNT / 2, valid_len); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   for (int i = 0; i < rcount; i++) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     float px = (float)i; |  |  |  |     float px = (float)i; | 
			
		
	
		
		
			
				
					
					|  |  |  |     float py = points[i] - off; |  |  |  |     float py = points[i] - off; | 
			
		
	
		
		
			
				
					
					|  |  |  |     const vec4 p_car_space = (vec4){{px, py, 0., 1.}}; |  |  |  |     const vec4 p_car_space = (vec4){{px, py, 0., 1.}}; | 
			
		
	
	
		
		
			
				
					|  |  | @ -311,7 +302,7 @@ static void update_lane_line_data(UIState *s, const float *points, float off, bo | 
			
		
	
		
		
			
				
					
					|  |  |  |     pvd->v[pvd->cnt].y = p_full_frame.v[1]; |  |  |  |     pvd->v[pvd->cnt].y = p_full_frame.v[1]; | 
			
		
	
		
		
			
				
					
					|  |  |  |     pvd->cnt += 1; |  |  |  |     pvd->cnt += 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |   for (int i = MODEL_PATH_MAX_VERTICES_CNT / 2; i > 0; i--) { |  |  |  |   for (int i = rcount; i > 0; i--) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     float px = (float)i; |  |  |  |     float px = (float)i; | 
			
		
	
		
		
			
				
					
					|  |  |  |     float py = is_ghost?(points[i]-off):(points[i]+off); |  |  |  |     float py = is_ghost?(points[i]-off):(points[i]+off); | 
			
		
	
		
		
			
				
					
					|  |  |  |     const vec4 p_car_space = (vec4){{px, py, 0., 1.}}; |  |  |  |     const vec4 p_car_space = (vec4){{px, py, 0., 1.}}; | 
			
		
	
	
		
		
			
				
					|  |  | @ -325,10 +316,10 @@ static void update_lane_line_data(UIState *s, const float *points, float off, bo | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void update_all_lane_lines_data(UIState *s, const PathData &path, model_path_vertices_data *pstart) { |  |  |  | static void update_all_lane_lines_data(UIState *s, const PathData &path, model_path_vertices_data *pstart) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   update_lane_line_data(s, path.points, 0.025*path.prob, false, pstart); |  |  |  |   update_lane_line_data(s, path.points, 0.025*path.prob, false, pstart, path.validLen); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   float var = fmin(path.std, 0.7); |  |  |  |   float var = fmin(path.std, 0.7); | 
			
		
	
		
		
			
				
					
					|  |  |  |   update_lane_line_data(s, path.points, -var, true, pstart + 1); |  |  |  |   update_lane_line_data(s, path.points, -var, true, pstart + 1, path.validLen); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   update_lane_line_data(s, path.points, var, true, pstart + 2); |  |  |  |   update_lane_line_data(s, path.points, var, true, pstart + 2, path.validLen); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void ui_draw_lane(UIState *s, const PathData *path, model_path_vertices_data *pstart, NVGcolor color) { |  |  |  | static void ui_draw_lane(UIState *s, const PathData *path, model_path_vertices_data *pstart, NVGcolor color) { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |