@startuml title Диаграмма состояний фигуры [*] --> Circle : init (по умолчанию) Circle : Красный цвет (0xFFFF0000) Circle : radius точек = 16 Triangle : Зелёный цвет (0xFF00FF00) Triangle : radius точек = 3 Square : Синий цвет (0xFF0000FF) Square : radius точек = 4 Circle --> Triangle : Клавиша '2' Circle --> Square : Клавиша '3' Triangle --> Circle : Клавиша '1' Triangle --> Square : Клавиша '3' Square --> Circle : Клавиша '1' Square --> Triangle : Клавиша '2' Circle : velocity движет позицию Circle : angular_velocity вращает Triangle : velocity движет позицию Triangle : angular_velocity вращает Square : velocity движет позицию Square : angular_velocity вращает note right of Circle Общие свойства для всех состояний: - position (x, y) - velocity (vx, vy) - angle (угол поворота) - angular_velocity (скорость вращения) - speed (множитель скорости: 1-30) - radius (радиус в пикселях) Управление: - '+'/'-': изменение speed - Up/Down: изменение radius - Enter: создать новое окно end note state "Коллизия с границей" as Collision { [*] --> CheckCollision CheckCollision --> InvertVelocity : точка вышла за границу InvertVelocity --> UpdateAngularVel : инверсия компоненты velocity UpdateAngularVel --> CheckCollision : обновление angular_velocity CheckCollision : проверка всех точек фигуры InvertVelocity : vel = -vel (по оси коллизии) UpdateAngularVel : зависит от направления движения } Circle --> Collision : каждый frame Triangle --> Collision : каждый frame Square --> Collision : каждый frame Collision --> Circle Collision --> Triangle Collision --> Square @enduml