tengri/Documentation/ProjectDecisions/DL_02.md

160 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

[//]: # (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