[//]: # (Documentation/ProjectDecisions/DL_02.md) # Лог Проектных Решений - Этап 2: Debug HUD система ## Решение 1: Архитектура страничной системы - **Проблема:** Необходимо отображать большое количество debug информации в ограниченном UI пространстве - **Решение:** Страничная система с навигацией (PageUp/PageDown) вместо одного большого HUD - **Обоснование:** - Лучше читаемость информации - Возможность логической группировки данных - Расширяемость для будущих этапов - **Дата:** 21.08.2025 ## Решение 2: Разделение обязанностей компонентов - **Проблема:** Где размещать логику управления UI и обновления данных - **Решение:** AC_DebugHUD (логика) + WBP_DebugHUD (UI) - четкое разделение - **Обоснование:** - AC_DebugHUD: управление состоянием, регистрация страниц, обновление данных - WBP_DebugHUD: только отображение и базовое UI взаимодействие - Легче тестировать и поддерживать - **Дата:** 21.08.2025 ## Решение 3: Система обновления страниц через enum функции - **Проблема:** Как гибко добавлять новые типы debug страниц без изменения core логики - **Решение:** E_DebugUpdateFunction + switch statement в UpdateCurrentPage() - **Альтернативы рассмотрены:** - Делегаты/callbacks - сложнее для Blueprint интеграции - Наследование классов страниц - избыточно для простых text страниц - **Дата:** 21.08.2025 ## Решение 4: Контроль частоты обновления - **Проблема:** Debug HUD может влиять на производительность при обновлении каждый кадр - **Решение:** UpdateFrequency в S_DebugSettings (0 = каждый кадр, >0 = Hz) - **Обоснование:** - Возможность снизить нагрузку для медленных устройств - Некоторые данные не требуют обновления 60 раз в секунду - Дизайнеры могут настраивать баланс производительность/отзывчивость - **Дата:** 21.08.2025 ## Решение 5: Использование компонентной архитектуры - **Проблема:** Интеграция debug системы с главным персонажем - **Решение:** AC_DebugHUD как отдельный компонент в BP_MainCharacter - **Обоснование:** - Модульность - легко включить/выключить debug систему - Независимость от Movement логики - Возможность переиспользования в других персонажах - **Дата:** 21.08.2025 ## Решение 6: Comprehensive testing система - **Проблема:** Как гарантировать стабильность сложной debug системы - **Решение:** Многоуровневое тестирование - TestDebugSystem() + TestPageContentGeneration() + TestNavigation() - **Покрытие:** - Системные тесты: инициализация, создание widget'а, регистрация страниц - Тесты контента: генерация данных для всех типов страниц - Тесты навигации: переключение между страницами, wraparound logic - **Дата:** 21.08.2025 ## Решение 7: Безопасная навигация с валидацией - **Проблема:** Edge cases при навигации (пустые страницы, неверные индексы) - **Решение:** IsValidNavigationState() проверки + GetVisiblePages() фильтрация - **Обоснование:** - Предотвращение crashes при неверных индексах - Автоматическое skip невидимых страниц - Graceful degradation при проблемах с данными - **Дата:** 21.08.2025 ## Решение 8: Widget lifecycle management - **Проблема:** Когда создавать/уничтожать debug widget - **Решение:** Создание в InitializeDebugHUD(), управление visibility через SetVisibility() - **Альтернативы отклонены:** - Создание/уничтожение при toggle - дорого и может вызвать GC спайки - Persistent widget - излишне расходует память когда не нужен - **Дата:** 21.08.2025 ## Решение 9: Текстовый контент vs богатый UI - **Проблема:** Использовать простой текст или создавать сложные UI элементы - **Решение:** Текстовый контент с поддержкой \n для этого этапа - **Обоснование:** - Быстрая разработка и итерация - Меньше сложности в UI layout - Достаточно для движения constants и базовых метрик - План обогащения UI на будущих этапах (слайдеры, графики) - **Дата:** 21.08.2025 ## Решение 10: Enhanced Input интеграция - **Проблема:** Как интегрировать debug hotkeys с основной input системой - **Решение:** Отдельные Input Actions (IA_NextDebugMode, IA_PrevDebugMode, IA_ToggleHUD) в IMC_Default - **Обоснование:** - Нет конфликтов с геймплейными input'ами - Легко настраивать hotkeys через Enhanced Input - Готовность к gamepad поддержке - **Дата:** 21.08.2025 ## Решение 11: Централизованное управление debug состоянием - **Проблема:** Где хранить глобальные debug настройки (показывать HUD, current page, etc.) - **Решение:** S_DebugSettings структура в AC_DebugHUD - **Поля:** - CurrentMode: Hidden/Visible - CurrentPageIndex: активная страница - ShowVisualDebug: отдельно от HUD - UpdateFrequency: контроль производительности - **Дата:** 21.08.2025 ## Решение 12: Print vs proper logging system - **Проблема:** Использовать простой Print() или создавать сложную logging систему - **Решение:** Print() для этого этапа, с планом на Logger в будущем - **Обоснование:** - Print() достаточно для development debugging - Фокус на core функциональности, а не на инфраструктуре - Logger система может быть добавлена позже без breaking changes - **Дата:** 21.08.2025 ## Технические находки ### Находка 1: TypeScript enum в Blueprint контексте - **Проблема:** Как правильно использовать TS enums для Blueprint интеграции - **Решение:** String enums вместо numeric для лучшей читаемости в Blueprint - **Пример:** `E_DebugMode.Visible = "Visible"` вместо `E_DebugMode.Visible = 0` ### Находка 2: Widget Size To Content оптимизация - **Проблема:** Debug HUD занимает лишнее место на экране - **Решение:** Size To Content = true для минимального UI footprint - **Результат:** HUD адаптируется под количество контента автоматически ### Находка 3: Модификация массивов через функции - **Проблема:** Прямая модификация массивов может вызывать issues в Blueprint контексте - **Решение:** Использование SetArrayElem(), AddToArray(), GetFromArray() wrapper функций - **Безопасность:** Единообразная обработка bounds checking ## Риски и митигации ### Риск 1: Performance impact от frequent string updates - **Митигация:** UpdateFrequency контроль + lazy updates только при изменении данных - **Мониторинг:** FPS метрики в Performance page ### Риск 2: Memory leaks от widget lifecycle - **Митигация:** Правильный cleanup в destructor + widget validity checks - **Тестирование:** Long-running сессии для проверки memory usage ### Риск 3: Сложность добавления новых страниц - **Митигация:** Четкая документация + примеры в TDD_Debug.md - **Упрощение:** Template методы для типовых операций ## Планы на следующие этапы ### Этап 3: Toast Messages система - Использовать аналогичную архитектуру компонентов - Добавить временные UI элементы с animation - Интегрировать с существующей debug системой ### Этап 4: Visual Debug элементы - Расширить ShowVisualDebug до полноценной системы - Добавить 3D debug рендеринг (линии, сферы, collision shapes) - Интегрировать с движением constants для real-time визуализации ### Будущие улучшения - Interactive UI элементы (слайдеры для real-time настройки) - Graph/chart отображение для performance metrics - Remote debugging capabilities