From 0c7ceb5d8d2ef002ad82b39d07d37493de2be4a5 Mon Sep 17 00:00:00 2001 From: nquidox Date: Fri, 17 Apr 2026 16:25:26 +0300 Subject: [PATCH] draw arc by lines instead of arc_2d --- src/states/linear/systems.rs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/states/linear/systems.rs b/src/states/linear/systems.rs index d48d23c..af95c8a 100644 --- a/src/states/linear/systems.rs +++ b/src/states/linear/systems.rs @@ -22,13 +22,28 @@ pub fn draw_track_gizmos(track: Res, mut gizmos: Gizmos) { PathSegment::Turn { radius, left } => { // вычисляем нормаль, центр, угол поворота арки и знак let arc = helper_arc_calculator(current_pos, current_dir, *left, *radius); + + // арки никак не хотели вставать на свои места + // gizmos.arc_2d( + // Isometry2d::new(arc.center, Rot2::degrees(current_angle)), + // FRAC_PI_2 * arc.sweep_sign, + // *radius, + // GREEN, + // ); + + // поэтому отрисовка поворота через линии + let steps = 16; + let mut prev_point = current_pos; - gizmos.arc_2d( - Isometry2d::new(arc.center, Rot2::radians(arc.start_angle)), - FRAC_PI_2, - *radius, - GREEN, - ); + for i in 1..=steps { + let t = i as f32 / steps as f32; + let angle = arc.start_angle + arc.sweep_sign * FRAC_PI_2 * t; + let point = arc.center + Vec2::from_angle(angle) * *radius; + + gizmos.line_2d(prev_point, point, GREEN); + prev_point = point; + } + current_pos = arc.end_pos; current_dir = arc.normal; } @@ -36,4 +51,4 @@ pub fn draw_track_gizmos(track: Res, mut gizmos: Gizmos) { } // рисуем финиш gizmos.circle_2d(current_pos, 5.0, Color::WHITE); -} +} \ No newline at end of file