10 KiB
10 KiB
Лог Проектных Решений - Этап 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