Выбор и подготовка боя
Назначение
Выбор и подготовка боя отвечает за интуитивный и удобный процесс подготовки к пошаговой битве. Эта часть игрового процесса решает задачу последовательного выбора боевой локации, элемента и конкретного элементаля из коллекции игрока с учетом ограничений ресурсов (маны) и состояния элементалей (например, перезарядки). Благодаря этому обеспечивается плавный переход к фазе боя, минимизируется вероятность ошибок и повышается вовлеченность пользователя.
В отличие от общей механики пошаговых битв, здесь сосредоточено внимание именно на этапе подготовки: визуальном выборе, навигации по вариантам, информировании о состоянии доступных ресурсов и поддержке обучения игрока через подсказки и туториалы.
Функциональность
Многоэтапный выбор:
Локация: Игрок выбирает арену боя, учитывая стоимость маны. Недоступные локации визуально затемнены и сопровождаются подсказками о нехватке ресурсов.
Элемент: После выбора локации происходит выбор стихийной принадлежности для боя — огонь, вода или земля.
Элементаль: На основании выбранного элемента игрок выбирает конкретного персонажа из своей коллекции, с учетом состояния перезарядки (cooldown). Возможен бой без элементаля (без защиты).
Обновление состояния и синхронизация:
Используются React-хуки для отслеживания текущей фазы игры (
gamePhase) и состояния игрока (gameState).В режиме выбора элементаля реализован снимок состояния перезарядки для предотвращения лишних перерисовок и дребезга интерфейса.
Обновление таймера перезарядки происходит каждую секунду, если не активна фаза выбора элементаля.
Клавиатурная навигация:
Поддержка навигации стрелками, выбора Enter/пробелом, возврата Backspace и отмены Escape.
На время туториала управление фокусом фиксируется, предотвращая случайные переключения.
Подсказки и доступность:
Для каждого варианта выбора (локация, элемент, элементаль) предусмотрены описательные подсказки и aria-атрибуты для доступности.
Визуальные индикаторы шагов помогают пользователю ориентироваться в процессе выбора.
Интеграция с обучением:
Отслеживается состояние прохождения туториала, показываются акценты и выделения.
События из туториала могут автоматически инициировать выбор и запуск боя.
Ключевые методы и данные
Из модуля игровой логики (gameLogic.ts) используются функции и константы для проверки доступности локаций и элементалей:
canAffordLocation(player.mana, locationKey);
isElementalOnCooldown(elemental);
getElementalCooldownRemaining(elemental);
getElementalData(selectedElement, elementalRarity);
Эти функции обеспечивают бизнес-логику проверки ресурсов и состояния персонажей, что напрямую влияет на интерфейс выбора.
Пример взаимодействия выбора локации:
<button
disabled={!canAffordLocation(player.mana, key as Location)}
onClick={() => canAffordLocation(player.mana, key as Location) && onSelectLocation(key as Location)}
>
{LOCATIONS[key].name} — {LOCATIONS[key].mana} Маны
</button>
Взаимосвязь с родительской темой и другими подтемами
Подтема "Выбор и подготовка боя" является первой фазой в общей механике пошаговых битв. Она тесно связана с:
Анимацией и эффектами боя: после успешного выбора элементаля управление передается в модуль анимации битвы (
BattleAnimationPixi), где визуально отображаются действия.Отображением результатов: по завершении боя результаты возвращаются в UI для отображения итогов и обновления коллекции.
Обучением и поддержкой игрока: этап выбора интегрирован с туториалами и подсказками, что обеспечивает плавное обучение пользователя.
В отличие от других подтем, здесь реализован особый механизм управления состоянием перезарядки элементалей с использованием статического снимка (staticCooldownSnapshot), чтобы избежать мерцаний интерфейса при обновлении.
Также реализована продвинутая клавиатурная навигация, учитывающая состояние обучения и позволяющая комфортно управлять выбором без мыши.
Диаграмма процесса выбора и подготовки к бою
flowchart TD
A[Начало: фаза меню] --> B[Выбор локации]
B -->|Выбрана доступная локация| C[Выбор элемента]
C -->|Выбран элемент| D[Загрузка коллекции элементалей]
D --> E{Есть доступные элементали?}
E -->|Да| F[Выбор элементаля из коллекции]
E -->|Нет| G[Выбор без элементаля]
F --> H[Запуск боя]
G --> H
H --> I[Переход к анимации боя]
style A fill:#f9f,stroke:#333,stroke-width:2px
style H fill:#bbf,stroke:#333,stroke-width:2px
Этот процесс отображает последовательность действий пользователя при подготовке к бою, начиная со стадии выбора локации и заканчивая передачей управления анимации сражения.
Таким образом, "Выбор и подготовка боя" обеспечивает удобный, информативный и надежный интерфейс подготовки к сражению, выступая связующим звеном между коллекцией игрока, ресурсами и основной боевой механикой.