DemoController.tsx

Обзор

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

Компонент тесно интегрирован с источником данных о персонажах и демо-действиях (demo-personas.json), а также использует иконки из библиотеки lucide-react для улучшения UX.


Описание компонентов и функций

Интерфейсы

DemoStep

interface DemoStep {
  id: string;
  title: string;
  description: string;
  duration: number;
  action: () => void;
  completed: boolean;
}

DemoControllerProps

interface DemoControllerProps {
  onPersonaChange: (persona: string) => void;
  onStepExecute: (step: DemoStep) => void;
  currentPersona: string;
}

Главный компонент: DemoController

export default function DemoController({ onPersonaChange, onStepExecute, currentPersona }: DemoControllerProps)

Назначение

Управляет демонстрационным процессом: выбором персонажа, списком шагов, контролем воспроизведения, отслеживанием времени и выполнением игровых действий.

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

Основные эффекты (React useEffect)

Основные методы


Использование компонента

<DemoController
  currentPersona="casual_gamer"
  onPersonaChange={(persona) => console.log('Persona changed to', persona)}
  onStepExecute={(step) => console.log('Executed step', step)}
/>

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


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


Структурная диаграмма компонента DemoController

classDiagram
    class DemoController {
        -isPlaying: boolean
        -currentStep: number
        -elapsedTime: number
        -demoSteps: DemoStep[]
        +startDemo(): void
        +pauseDemo(): void
        +resetDemo(): void
        +nextStep(): void
        +executeAction(action: any): void
        +formatTime(seconds: number): string
        +render(): JSX.Element
    }

    class DemoStep {
        +id: string
        +title: string
        +description: string
        +duration: number
        +action(): void
        +completed: boolean
    }

    DemoController ..> DemoStep : uses

Итог

Компонент DemoController.tsx предоставляет комплексный контроллер для управления демонстрационной сессией с выбором персонажей, последовательным выполнением шагов и визуализацией прогресса и состояния сети. Его гибкая архитектура позволяет легко адаптироваться под новые персональные демо-сценарии и интегрируется с остальными частями игрового приложения.