63 lines
2.0 KiB
Plaintext
63 lines
2.0 KiB
Plaintext
@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
|