App.tsx

Обзор файла

Файл App.tsx представляет собой корневой React-компонент приложения, реализующего игру с элементальной тематикой. Он отвечает за управление основными состояниями игры, такими как выбор локаций, элементов, элементов коллекции, проведение боёв и отображение результатов. Вся логика взаимодействия с пользователем, обновления игрового состояния и сохранения данных реализована именно здесь. Кроме того, файл интегрирует множество дочерних компонентов интерфейса и связывает их с бизнес-логикой, импортируемой из вспомогательных модулей.

Основная функциональность


Ключевые компоненты и методы

Константы


Компонент App

Главный функциональный React-компонент, реализующий логику игры и связывающий UI с бизнес-логикой.

Состояния (useState)

Хуки эффекта (useEffect)


Основные функции (useCallback)

updatePlayer(updates: Partial<PlayerStats>): void

Обновляет состояние игрока с учётом новых параметров, рассчитывает изменения маны, опыта, уровней, достижений и статистики. Автоматически обновляет уведомления о достижениях и повышениях уровней.

Параметры:

Пример использования:

updatePlayer({ mana: 1800, wins: 5 });

selectLocation(location: Location): void

Позволяет игроку выбрать локацию для боя, если у него достаточно маны. Переводит состояние игры в фазу выбора элемента.


selectElement(element: Element): void

Выбирает элемент для боя.


selectElemental(elemental: ElementalRarity | null): void

Выбирает элементаля из коллекции для боя.


returnToLocationSelection(): void

Возвращает игрока к выбору локации, сбрасывая выбор элемента и элементаля.


returnToElementSelection(): void

Возвращает игрока к выбору элемента, сбрасывая выбор элементаля.


startBattleProcess(): void

Запускает процесс боя: проверяет наличие выбранной локации и элемента, достаточно ли маны для ставки, создаёт оппонента и переводит игру в фазу выбора элементаля.


startBattle(): void

Начинает бой, рассчитывает результат боя на основе выбранных элементов и элементалей, обновляет ману игрока и переводит игру в фазу анимации боя.


onBattleAnimationComplete(): void

Обрабатывает завершение анимации боя, применяет результаты боя к состоянию игрока (обновляет счета, ману, опыт, коллекцию), создаёт лог боя, может добавить нового элементаля в коллекцию.


returnToMenu(): void

Возвращает игру в главное меню, сбрасывает выборы и очищает состояние оппонента и лога боя.


handleTabChange(tab: 'profile' | 'battle' | 'collection' | 'settings'): void

Обрабатывает переключение вкладок интерфейса. Если в данный момент отображается страница результата боя, сначала возвращается в меню.


dismissAchievement(achievementId: string): void

Закрывает уведомление об указанном достижении.


dismissElementalReward(): void

Закрывает уведомление о новом элементале.


levelUpElementalById(elementalId: string): void

Позволяет повысить уровень элементаля по его ID, если у игрока достаточно маны и элементаль можно улучшить. Обновляет коллекцию и статистику элементалей.


Туториалы


resetGameCache(): void

Сбрасывает все сохранённые данные игры и настроек, восстанавливая первоначальное состояние приложения.


handleUserInteraction(): void

Активирует музыку при первом взаимодействии пользователя с приложением.


Взаимодействие с другими частями системы

Компонент App импортирует и использует следующие внешние модули и компоненты:

Вся бизнес-логика и состояние хранятся в App.tsx, а отображение UI делегировано дочерним компонентам, которые получают необходимые данные и методы через пропсы.


Пример использования

В типичном сценарии пользователь запускает приложение, выбирает локацию и элемент, начинает бой, наблюдает анимацию и получает результаты, после чего может управлять своей коллекцией элементалей, просматривать профиль и настраивать параметры игры. Все изменения сохраняются автоматически.


Важные детали реализации и алгоритмы


Структура компонентов и поток данных

componentDiagram
    App <|-- ProfileHeader
    App <|-- Navigation
    App <|-- GlassGradientHeader
    App <|-- AudioPlayer
    App <|-- RulesPage
    App <|-- ProfileTab
    App <|-- BattleComponent
    App <|-- BattleAnimationPixi
    App <|-- BattleResultPage
    App <|-- CollectionTab
    App <|-- SettingsTab
    App <|-- StepByStepTutorial
    App <|-- TutorialTooltip
    App o-- "gameLogic" : использует функции
    App o-- "types" : использует типы

    App : Управляет состоянием игры и интерфейса
    App : Обрабатывает выборы и действия пользователя
    App : Передаёт данные и колбеки дочерним компонентам
    App : Обрабатывает логику боя и обновляет игрока

Заключение

Файл App.tsx является сердцем приложения, объединяя пользовательский интерфейс с комплексной игровой логикой. Он обеспечивает управление всей жизненной циклом игры, от выбора параметров до ведения боёв и отображения достижений. Благодаря модульной структуре и разделению задач между компонентами и утилитами, приложение остаётся масштабируемым и удобным для поддержки.