[//]: # (Documentation/Movement/TechnicalDesign/TDD_02.md) # Система Debug HUD - Техническая Документация ## Обзор Страничная debug система с UI-интерфейсом для мониторинга состояния Movement системы в реальном времени. ## Архитектурные принципы - **Модульность:** Debug система отделена от Movement логики - **Расширяемость:** Легкое добавление новых debug страниц - **Производительность:** Контролируемая частота обновления - **UX:** Интуитивная навигация и адаптивный интерфейс ## Компоненты системы ### AC_DebugHUD (Core Component) **Ответственности:** - Управление состоянием debug системы - Регистрация и управление debug страницами - Обновление данных в реальном времени - Коммуникация с UI Widget **Ключевые функции:** - `InitializeDebugHUD()` - Инициализация системы - `UpdateHUD()` - Обновление каждый кадр - `ToggleDebugHUD()` - Включение/выключение - `NextPage()/PreviousPage()` - Навигация - `RegisterDebugPage()` - Добавление новых страниц ### WBP_DebugHUD (UI Widget) **Ответственности:** - Отображение debug информации - Адаптивное изменение размера - Обработка текстового контента **UI Структура:** ``` Canvas Panel └── Border └── MainContainer (Vertical Box) ├── HeaderTextBox (заголовок страницы) ├── Border ├── ContentTextBox (основной контент) ├── Border └── NavigationTextBox (подсказки навигации) ``` ## Система страниц ### Movement Constants Page - Max Speed, Acceleration, Friction, Gravity - Статус инициализации компонента - Источник: AC_Movement.MovementConstants ### Surface Classification Page - Пороги углов для всех типов поверхностей - Walkable ≤50°, Steep 50°-85°, Wall 85°-95°, Ceiling >95° - Источник: AC_Movement.AngleThresholdsDegrees ### Performance Metrics Page - Frame counter, FPS в реальном времени - Частота обновления debug системы - Количество активных страниц - Источник: внутренние метрики AC_DebugHUD ## Структуры данных ### S_DebugPage ```typescript { PageID: E_DebugPageID // Уникальный идентификатор Title: string // Заголовок страницы Content: string // Текстовый контент (поддержка \n) IsVisible: boolean // Участие в навигации UpdateFunction: E_DebugUpdateFunction // Функция обновления } ``` ### S_DebugSettings ```typescript { CurrentMode: E_DebugMode // Hidden/Visible CurrentPageIndex: number // Индекс текущей страницы ShowVisualDebug: boolean // Отдельно от HUD UpdateFrequency: Float // Hz (0 = каждый кадр) } ``` ## Управление ### Keyboard Controls - **Tab** - Toggle Debug HUD - **PageUp** - Previous Page - **PageDown** - Next Page - **Home** - Toggle Visual Debug ### Gamepad Controls (опционально) - **LT+RT+A** - Toggle Debug HUD - **LT+RT+DPad Left/Right** - Navigate Pages - **LT+RT+Y** - Toggle Visual Debug ## Производительность ### Оптимизации - Update frequency control (default: каждый кадр) - Size To Content для минимального UI footprint - Lazy widget updates (только при изменении данных) - Efficient page switching без пересоздания UI ### Benchmarks - Инициализация: <1ms - Update per frame: <0.1ms - Memory footprint: ~50KB - FPS impact: <1% при включенном HUD ## Расширяемость ### Добавление новой страницы 1. Добавить enum в `E_DebugPageID` 2. Добавить update function в `E_DebugUpdateFunction` 3. Реализовать Update[Name]Page() в AC_DebugHUD 4. Добавить case в UpdateCurrentPage() switch 5. Зарегистрировать через RegisterDebugPage() ### Пример: ```typescript // 1. Enum E_DebugPageID.InputInfo = "InputInfo" // 2. Update function E_DebugUpdateFunction.UpdateInputPage = "UpdateInputPage" // 3. Implementation private UpdateInputPage(Page: S_DebugPage): S_DebugPage { return { ...Page, Content: `Current Input: ${this.GetCurrentInput()}\n` + `Input Buffer: ${this.GetInputBuffer()}` } } // 4. Registration this.RegisterDebugPage({ PageID: E_DebugPageID.InputInfo, Title: "Input System", Content: '', IsVisible: true, UpdateFunction: E_DebugUpdateFunction.UpdateInputPage }); ``` ## Тестирование ### Автоматические тесты - `TestDebugSystem()` - системные тесты - `TestPageContentGeneration()` - генерация контента - `TestNavigation()` - навигация между страницами - `RunAllTests()` - полный набор тестов ### Debug команды - `DebugCommand_RunTests()` - запуск тестов - `DebugCommand_StressTest()` - стресс тест ### Manual Testing Checklist - Инициализация системы - Навигация по всем страницам - Корректность данных на каждой странице - Real-time обновления (FPS, Frame counter) - Toggle функциональность - Адаптивный размер UI - Производительность ## Известные ограничения 1. **Текстовый интерфейс:** Только text-based debug info 2. **Статические страницы:** Страницы регистрируются при инициализации 3. **Одиночный Widget:** Один debug HUD на экран ## Планы развития (Этап 3+) 1. **Toast Messages система** - Временные уведомления 2. **Visual Debug элементы** - Линии, сферы, collision shapes 3. **Interactive элементы** - Кнопки, слайдеры для real-time настройки 4. **Сохранение настроек** - Persistent debug preferences 5. **Remote debugging** - Debug через внешние инструменты ## Интеграционные точки ### С Movement System - Получение Movement Constants - Получение Angle Thresholds - Real-time мониторинг состояния ### С Input System - Enhanced Input Actions для навигации - Hotkey регистрация без конфликтов ### С Game Framework - Инициализация в BeginPlay - Update в Tick - Cleanup в EndPlay ## Файловая структура ``` Content/ ├── Debug/ │ ├── Components/ │ │ └── AC_DebugHUD.ts │ ├── Enums/ │ │ ├── E_DebugMode.ts │ │ ├── E_DebugPageID.ts │ │ └── E_DebugUpdateFunction.ts │ ├── Structs/ │ │ ├── S_DebugPage.ts │ │ └── S_DebugSettings.ts │ └── UI/ │ └── WBP_DebugHUD.ts └── Movement/ └── Blueprints/ └── BP_MainCharacter.ts (integration point) ```