160 lines
10 KiB
Markdown
160 lines
10 KiB
Markdown
[//]: # (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
|