BattleEffects.tsx

Обзор

BattleEffects.tsx — это React-компонент, реализующий визуальные эффекты для пошаговых боёв элементалей в зависимости от выбранного элемента (огонь, вода, земля). Он использует библиотеку PixiJS для создания высокопроизводительных 2D-анимаций и обеспечивает адаптивность эффектов под разные устройства — от десктопов до мобильных экранов.

Основная задача компонента — отображать динамические частицы, волны, искры и кристаллы, визуализирующие стихии боя, создавая атмосферу и усиливая визуальное восприятие сражения. Компонент запускается только когда активен (isActive), а его анимации оптимизированы под размеры экрана и производительность устройства.


Составные части и функциональность

Интерфейс BattleEffectsProps

interface BattleEffectsProps {
  isActive: boolean;               // Флаг активности эффекта (отображать или нет)
  element: 'fire' | 'water' | 'earth'; // Выбранный элемент для отображения соответствующих эффектов
}

Компонент BattleEffects

const BattleEffects: React.FC<BattleEffectsProps> = ({ isActive, element }) => { ... }

Параметры:

Возвращаемое значение:

Описание работы:

  1. Инициализация PixiJS:

    • Создаётся экземпляр PIXI.Application с параметрами, адаптированными под размер экрана и устройство.

    • Канвас добавляется в DOM под элементом canvasRef.

  2. Определение типа устройства:

    • isMobile и isSmallMobile вычисляются через useMemo, основываясь на размерах окна браузера.

    • Это влияет на качество рендеринга и параметры анимации для оптимизации производительности.

  3. Цветовые схемы эффектов:

    • Цвета для каждого элемента (primary, secondary, glow) хранятся в объекте elementColors.

  4. Создание эффектов:

    • В цикле с интервалами создаются три типа эффектов:

      • Энергетические волны (createEnergyWave): круги, которые масштабируются и затухают.

      • Искры (createSparkle): частицы со звездообразными или ромбовидными формами, которые движутся вверх, вращаются и исчезают.

      • Элементно-специфичные эффекты (createElementEffect):

        • Огонь: частицы-огоньки, которые двигаются и колышутся.

        • Вода: расширяющиеся и затухающие круги-волны.

        • Земля: кристаллы с полигонами, которые поднимаются, поворачиваются и исчезают.

  5. Анимация:

    • Для каждого эффекта запускается функция animate, которая обновляет параметры (масштаб, альфа, позиция, вращение) с помощью requestAnimationFrame.

    • При окончании анимации объекты удаляются из сцены и уничтожаются.

  6. Оптимизация и очистка:

    • Интервалы очистки анимаций сбрасываются при размонтировании компонента.

    • PixiJS приложение уничтожается, чтобы освободить ресурсы.

  7. Условный рендеринг:

    • Если isActivefalse, возвращается null без рендеринга.


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


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


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

// Внутри BattleAnimationPixi.tsx или другого компонента анимации боя
<BattleEffects isActive={true} element="fire" />

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

classDiagram
    class BattleEffects {
        -canvasRef: React.RefObject<HTMLDivElement>
        -appRef: React.RefObject<PIXI.Application | null>
        -isMobile: boolean
        -isSmallMobile: boolean
        -elementColors: Record<string, {primary: number, secondary: number, glow: number}>
        +BattleEffects(props: BattleEffectsProps)
        +render() React.ReactElement | null
        -createEnergyWave(): void
        -createSparkle(): void
        -createElementEffect(): void
    }

Итог

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


Если нужна дополнительная информация по интеграции с другими компонентами или по оптимизации анимаций — готов предоставить.