Сцены и 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.
SceneConfig.assets.- Создаёт DI сцены и собирает layout
- Подготавливает конфиги и запускает сервисы
- Активирует компоненты и запускает FSM, если она задана
- Вызывает
create(). ВFsmDrivenSceneэтот метод отправляетSceneReady.
Класс GameScene в публичном проекте лишь передаёт конфигурацию базовому классу. Логику размещения фигур в него добавлять не требуется.
Переходы между сценами
SceneManager.start(key) открывает начальную сцену. replace(key, options) заменяет верхнюю; push добавляет сцену в стек, а pop убирает верхнюю. Обновляется только верхняя неприостановленная сцена. Переходы проходят через очередь и имеют таймаут жизненных хуков.
Через options.params передаются входные данные новой сцены. Команда читает их через sceneParams и проверяет decodeSceneParams; параметры перехода не заменяют состояние текущей партии.