[//]: # (Movement/ManualTestingChecklist.md) # Movement System - Manual Testing Checklist ## Тестовая среда - **Уровень:** TestLevel с BP_MainCharacter - **Требования:** MovementComponent инициализирован - **Debug HUD:** Включен для проверки параметров --- ## 1. Инициализация системы ### 1.1 Базовая инициализация - [ ] **InitializeMovementSystem()** выполняется без ошибок при запуске уровня - [ ] **IsInitialized flag** устанавливается в true после инициализации - [ ] **Angle conversion** - пороги корректно конвертируются из градусов в радианы - [ ] **CapsuleComponent reference** - передаётся и сохраняется корректно (этап 9) --- ## 2. Константы движения ### 2.1 Default значения - [ ] **MaxSpeed = 800.0** - значение установлено по умолчанию - [ ] **Acceleration = 10.0** - значение установлено по умолчанию - [ ] **Friction = 8.0** - значение установлено по умолчанию - [ ] **Gravity = 980.0** - значение установлено по умолчанию ### 2.2 Пороговые углы - [ ] **Walkable = 50.0°** - значение по умолчанию в градусах - [ ] **SteepSlope = 85.0°** - значение по умолчанию в градусах - [ ] **Wall = 95.0°** - значение по умолчанию в градусах ### 2.3 Sweep Collision константы (Этап 9) - [ ] **MaxStepSize = 50.0** - максимальный размер шага sweep - [ ] **MinStepSize = 1.0** - минимальный размер шага - [ ] **MaxCollisionChecks = 25** - лимит проверок за кадр - [ ] **GroundTraceDistance = 5.0** - дистанция trace вниз для ground detection --- ## 3. Базовое движение (Этап 7) ### 3.1 Управление клавиатурой - [ ] **W** - персонаж движется вперед (+X направление) - [ ] **S** - персонаж движется назад (-X направление) - [ ] **A** - персонаж движется влево (+Y направление) - [ ] **D** - персонаж движется вправо (-Y направление) - [ ] **Отсутствие input** - персонаж останавливается ### 3.2 Управление геймпадом - [ ] **Left Stick Up** - движение вперед - [ ] **Left Stick Down** - движение назад - [ ] **Left Stick Left** - движение влево - [ ] **Left Stick Right** - движение вправо - [ ] **Stick в центре** - персонаж останавливается ### 3.3 Физика движения - [ ] **Плавное ускорение** - персонаж набирает скорость постепенно при нажатии клавиш - [ ] **Плавное торможение** - персонаж останавливается плавно при отпускании клавиш - [ ] **MaxSpeed limit** - скорость не превышает 800.0 units/sec - [ ] **Диагональное движение** - скорость диагонального движения равна прямому (не быстрее) - [ ] **Стабильное поведение** - нет рывков, заиканий или неожиданных ускорений ### 3.4 Состояния движения - [ ] **Idle state** - MovementState = Idle когда персонаж стоит - [ ] **Walking state** - MovementState = Walking при движении - [ ] **Airborne state** - MovementState = Airborne в воздухе (этап 9) - [ ] **InputMagnitude** - корректно отражает силу input (0-1) - [ ] **CurrentSpeed** - показывает текущую горизонтальную скорость --- ## 4. Ground Detection и Падение (Этап 9) ### 4.1 Базовое падение и приземление - [ ] **Падение начинается:** Персонаж падает вниз с нормальной скоростью - [ ] **Приземление без провалов:** Персонаж останавливается НА полу, а не В полу - [ ] **Стабильная Z позиция:** После приземления Z координата стабильна (±0.5 единиц) - [ ] **IsGrounded = true:** Debug HUD показывает `Is Grounded: true` после приземления - [ ] **Velocity.Z = 0:** После приземления вертикальная скорость обнулена **Ожидаемые значения в Debug HUD:** ``` Current Velocity: X=0.00 Y=0.00 Z=0.00 Is Grounded: true Location Z: ~0.125 (стабильно) ``` ### 4.2 Движение по полу без провалов - [ ] **Движение WASD:** Персонаж двигается по полу плавно - [ ] **Нет дёрганий Z:** При движении нет вертикальных рывков - [ ] **Z позиция стабильна:** Разброс Z ≤ 0.5 единиц во время движения - [ ] **Collision Checks:** В Debug HUD не превышает 25 **Ожидаемые значения в Debug HUD:** ``` Speed: 600-800 Is Grounded: true Collision Checks: 3-8/25 ``` ### 4.3 Край платформы - [ ] **Подход к краю:** Персонаж может подойти к краю платформы - [ ] **Схождение с края:** Персонаж начинает падать после выхода за край - [ ] **IsGrounded = false:** Debug HUD показывает airborne state - [ ] **Короткая "липкость":** Капсула может кратковременно зацепиться (это нормально) - [ ] **Повторное приземление:** После падения с края может приземлиться снова **Известное поведение:** Лёгкое "прилипание" к краю из-за скруглённой капсулы - это нормально, исправим в этапе 15 --- ## 5. Sweep Collision Performance (Этап 9) ### 5.1 Количество collision checks | Сценарий | Ожидаемое кол-во checks | |----------|------------------------| | Стоит на месте | 0-1 | | Медленное движение | 2-5 | | Нормальная скорость | 5-12 | | Максимальная скорость | 15-25 | | Падение с высоты | 10-20 | - [ ] **Idle:** Collision Checks = 0-1 - [ ] **Walking:** Collision Checks = 5-12 - [ ] **Fast movement:** Не превышает MaxCollisionChecks (25) ### 5.2 Адаптивный размер шага - [ ] **При медленном движении:** Меньше traces (видно в visual debug) - [ ] **При быстром движении:** Больше traces, меньше расстояние между ними - [ ] **Падение:** Частые проверки во время быстрого падения **Visual debug traces должны показать:** Короткие шаги при высокой скорости, длинные при низкой --- ## 6. Детерминированность (Этап 9) ### 6.1 Тест повторяемости **Процедура:** 1. Запомнить начальную позицию персонажа 2. Подвигать персонажа в определённом направлении 5 секунд 3. Перезапустить уровень 4. Повторить те же движения 5. Сравнить финальные позиции **Проверки:** - [ ] **Z координата идентична:** Разница ≤ 0.5 единиц - [ ] **XY координаты близки:** Небольшое отклонение допустимо (инпут timing) - [ ] **IsGrounded одинаков:** Один и тот же state в конце --- ## 7. Debug HUD Integration ### 7.1 Movement Info Page - [ ] **Константы** отображаются корректно: - Max Speed: 800 - Acceleration: 10 - Friction: 8 - Gravity: 980 - Initialized: true - [ ] **Текущее состояние** отображается: - Current Velocity: X, Y, Z компоненты - Speed: горизонтальная скорость - Is Grounded: true/false - Surface Type: Walkable (пока всегда) - Movement State: Idle/Walking/Airborne - Input Magnitude: 0.00-1.00 - [ ] **Rotation info** (этап 8): - Current Yaw - Target Yaw - Rotation Delta - Is Rotating - [ ] **Position** (этап 9): - Location: X, Y, Z координаты - [ ] **Sweep Collision** (этап 9): - Collision Checks: X/25 - Ground Distance: 5.0 cm ### 7.2 Реальное время обновления - [ ] **Velocity** изменяется в реальном времени при движении - [ ] **Speed** корректно показывает magnitude горизонтальной скорости - [ ] **Movement State** переключается между Idle/Walking/Airborne - [ ] **Input Magnitude** отражает силу нажатия - [ ] **Collision Checks** обновляется каждый кадр при движении - [ ] **Location** обновляется плавно --- ## 8. Автотесты Integration ### 8.1 FT_SurfaceClassification - [ ] **Тест проходит** - классификация поверхностей по углам ### 8.2 FT_MovementInitialization - [ ] **Тест проходит** - инициализация, начальные состояния, конфигурация ### 8.3 Удалённые тесты - ❌ **FT_BasicMovement** - удалён (требует тестовый уровень) - ❌ **FT_DiagonalMovement** - удалён (требует тестовый уровень) --- ## 9. Performance ### 9.1 Производительность - [ ] **Stable 60+ FPS** при активном движении - [ ] **No memory leaks** при длительном использовании - [ ] **Smooth movement** без микро-заиканий - [ ] **Sweep overhead** минимален (<1ms дополнительно) ### 9.2 Отзывчивость - [ ] **Instant response** на нажатие клавиш (нет input lag) - [ ] **Smooth transitions** между состояниями движения - [ ] **Consistent timing** независимо от FPS --- ## Критерии прохождения этапов ### Этап 7: Базовое движение - [ ] Все основные направления движения работают - [ ] Физика движения плавная и отзывчивая - [ ] MaxSpeed limit соблюдается - [ ] Диагональное движение не дает преимущества в скорости ### Этап 9: Sweep Collision + Ground Detection - [ ] Полное отсутствие tunneling при любых скоростях - [ ] Стабильная Z позиция (разброс <0.5 единиц) - [ ] Детерминированность (100% воспроизводимость) - [ ] Performance <25 collision checks за кадр - [ ] Значения корректно отображаются в Debug HUD