StepByStepTutorial.tsx

Обзор

Файл StepByStepTutorial.tsx реализует React-компонент пошагового интерактивного туториала, предназначенного для обучения пользователей основным этапам игрового процесса. Компонент выделяет ключевые элементы интерфейса с помощью подсветки и отображает позиционированные подсказки (tooltip) с описанием каждого шага. Туториал структурирован по фазам игры (например, выбор локации, выбор элемента, выбор элементаля), что позволяет последовательно сопровождать пользователя в различных частях интерфейса.

Основные задачи компонента:


Составные части и описание

Интерфейс TutorialStep

Определяет структуру шага туториала.

Свойство

Тип

Описание

id

string

Уникальный идентификатор шага.

targetSelector

string

CSS-селектор целевого элемента для подсветки.

title

string

Заголовок шага, отображаемый в подсказке.

description

string

Текстовое описание шага для пользователя.

phase

['menu' \

'elementSelection' \

position?

`'top' \

'bottom' \

actionRequired?

boolean (опционально)

Требуется ли от пользователя действие (например, клик) для перехода к следующему шагу.

triggerNext?

`'click' \

'auto'` (опционально)


Пропсы компонента StepByStepTutorial

interface StepByStepTutorialProps {
  isActive: boolean;         // Активен ли туториал в текущий момент
  currentPhase: string;      // Текущая фаза игры (например, 'menu', 'elementSelection')
  steps: TutorialStep[];     // Массив всех шагов туториала
  onComplete: () => void;    // Коллбэк при завершении всего туториала
  onSkip: () => void;        // Коллбэк при пропуске туториала пользователем
}

Компонент StepByStepTutorial

Описание

Основной React-компонент, отвечающий за отображение и управление пошаговым интерактивным туториалом. На основе текущей фазы и активного шага он:

Внутренние состояния

Состояние

Тип

Описание

currentStepIndex

number

Индекс активного шага в массиве шагов текущей фазы.

targetElement

`HTMLElement \

null`

tooltipPosition

{ top: number; left: number; }

Координаты для позиционирования всплывающей подсказки.

highlightPosition

{ top: number; left: number; width: number; height: number; borderRadius: string; }

Позиция и размеры рамки подсветки вокруг целевого элемента.


Основные методы и логика

updateAllPositions(element: HTMLElement)


Поиск и обновление целевого элемента


Обновление позиций в реальном времени


Переход между шагами (nextStep)


Автоматический переход


Обработка кликов по целевому элементу


UI компонента


Константа BATTLE_TUTORIAL_STEPS

Пример набора шагов для боевого туториала, состоящий из трёх этапов:

  1. Выбор локации

  2. Выбор элемента

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

Каждый шаг содержит все необходимые данные для корректного отображения и логики перехода.


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

import StepByStepTutorial, { BATTLE_TUTORIAL_STEPS } from './StepByStepTutorial';

function BattleTutorialContainer() {
  const [isTutorialActive, setTutorialActive] = React.useState(true);
  const [phase, setPhase] = React.useState('menu');

  const handleComplete = () => {
    console.log('Tutorial completed');
    setTutorialActive(false);
  };

  const handleSkip = () => {
    console.log('Tutorial skipped');
    setTutorialActive(false);
  };

  return (
    <StepByStepTutorial
      isActive={isTutorialActive}
      currentPhase={phase}
      steps={BATTLE_TUTORIAL_STEPS}
      onComplete={handleComplete}
      onSkip={handleSkip}
    />
  );
}

Взаимодействие с остальной системой


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


Диаграмма структуры компонента

classDiagram
    class StepByStepTutorial {
        - currentStepIndex: number
        - targetElement: HTMLElement | null
        - tooltipPosition: {top: number, left: number}
        - highlightPosition: {top: number, left: number, width: number, height: number, borderRadius: string}
        + isActive: boolean
        + currentPhase: string
        + steps: TutorialStep[]
        + onComplete(): void
        + onSkip(): void
        + updateAllPositions(element: HTMLElement): void
        + nextStep(): void
        + render(): JSX.Element | null
    }

    class TutorialStep {
        + id: string
        + targetSelector: string
        + title: string
        + description: string
        + phase: string
        + position?: string
        + actionRequired?: boolean
        + triggerNext?: string
    }

    StepByStepTutorial "1" o-- "*" TutorialStep : steps

Заключение

Файл StepByStepTutorial.tsx содержит полнофункциональный компонент интерактивного пошагового туториала с выделением элементов интерфейса и подсказками, адаптированный для динамичного игрового UI. Его архитектура обеспечивает гибкость, удобство использования и плавный пользовательский опыт, что способствует эффективному обучению игроков и улучшению общего взаимодействия с приложением.