tengri/Documentation/ProjectDecisions/DL_02.md

10 KiB
Raw Blame History

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