@startuml title Цикл анимации фигуры (aux_thread) start :aux_thread запущен; while (окно не закрыто?) is (да) :Залочить figure_mutex; :figure_animation_step(draw_info); partition "figure_animation_step (ASM)" { :Обработка коллизий; note right figure_handle_collision(): - Расчёт точек фигуры на окружности - Проверка выхода за границы - Инверсия velocity при коллизии - Обновление angular_velocity end note :Обновить позицию; note right position += (velocity * speed) / height end note :Обновить угол поворота; note right angle += angular_velocity * speed end note :Применить трение к вращению; note right angular_velocity *= 0.95 end note } :Разлочить figure_mutex; :usleep(33 ms); note right: ~30 FPS обновление физики endwhile (нет) :Завершение потока; stop @enduml