Конфигурация игры
В одном месте свяжем системы движка, ресурсы, сцены и DI.
GameConfig — описание запуска игры. Он передаётся в Engine.run и задаёт, какие системы и сцены подготовить. В Block Puzzle это статическое поле BlockPuzzleGameConfig.config.
Сокращённая структура game.config.ts:
static readonly config: GameConfig = {
system: {
canvasBackground: '#1d57c8',
screen: {
land: { width: 960, height: 540 },
port: { width: 540, height: 960 },
dpr: 'auto',
maxDpr: 2,
},
boot: { configs: { engineStartBundles: ['configs'] } },
},
assets: { bundles: BlockPuzzleAssetsManifest.bundles, preload: ['configs'] },
scenes: {
initial: 'boot',
map: { boot: BootSceneDefinition.config, game: GameSceneDefinition.config },
},
di: new BlockPuzzleDiDefinitionRoot(),
};
Размеры land и port задают виртуальные профили экрана. Они не фиксируют размер браузера: ScreenManager рассчитывает масштаб для текущего окна. Ограничение maxDpr влияет на плотность рендера, а не на размеры клеток в правилах игры.
Дополнительное поле layouts.textStylesConfigId подключает каталог стилей текста. data хранит произвольные данные приложения; при чтении неизвестной структуры её всё равно нужно проверить схемой.
Ключ scenes.initial должен существовать в scenes.map. Для каждого ключа требуется соответствующее определение SceneDiDefinition. Ошибка в этих связях обнаруживается при старте, а не после первого хода.