@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
