SceneConfig и BaseScene01 / 13

Сцены и SceneManager

Сцена собирает окружение, а игровое поведение передаёт другим объектам.

SceneConfig описывает сцену: её ключ, класс, ресурсы, layout и FSM. В Block Puzzle описание игровой сцены находится в scene.config.ts:

import { GameScene } from '../../GameScene';

import { GameFsm } from './fsm.config';

import type { SceneConfig } from '@gamedevland/engine/core';

export class GameSceneDefinition {
  static readonly config: SceneConfig = {
    key: 'game',
    useClass: GameScene,
    layout: 'json/layouts/scenes/game/layout.json',
    fsm: GameFsm.config,
  };
}

BaseScene предоставляет общий жизненный цикл. FsmDrivenScene дополняет его событиями готовности и обновления, чтобы игровой сценарий оставался в FSM.

01
preload()Загружает ресурсы из SceneConfig.assets.
02
onEnter()
  1. Создаёт DI сцены и собирает layout
  2. Подготавливает конфиги и запускает сервисы
  3. Активирует компоненты и запускает FSM, если она задана
  4. Вызывает create(). В FsmDrivenScene этот метод отправляет SceneReady.
03
onExit()Останавливает FSM, освобождает сервисы, частицы, layout и DI сцены.

Класс GameScene в публичном проекте лишь передаёт конфигурацию базовому классу. Логику размещения фигур в него добавлять не требуется.

Переходы между сценами

SceneManager.start(key) открывает начальную сцену. replace(key, options) заменяет верхнюю; push добавляет сцену в стек, а pop убирает верхнюю. Обновляется только верхняя неприостановленная сцена. Переходы проходят через очередь и имеют таймаут жизненных хуков.

Через options.params передаются входные данные новой сцены. Команда читает их через sceneParams и проверяет decodeSceneParams; параметры перехода не заменяют состояние текущей партии.

Источники ↗

Block Puzzle · scene.config.ts↗Конфигурация игровой сцены.