import { Engine, SaveManager, AssetLoader, type Renderer, type SceneManager } from '@rpg/engine';
/**
* Игровой контекст: движок, сохранения, загрузчик ассетов.
* Движок ничего не знает об этом классе — он только потребляет его API.
*/
export class Game {
/** Виртуальное разрешение (пиксель-арт). */
static readonly VIRTUAL_W = 480;
static readonly VIRTUAL_H = 270;
readonly saves: SaveManager;
readonly assets: AssetLoader;
/** Все ассеты игры: ключ = путь в apps/game/assets без расширения. */
static readonly ASSET_KEYS = [
'tiles/grass',
'tiles/path',
'tiles/water',
'tiles/ash',
'tiles/bellflower',
'tiles/tree',
'chars/hero_down_1',
'chars/hero_down_2',
'chars/hero_up_1',
'chars/hero_up_2',
'chars/hero_side_1',
'chars/hero_side_2',
'chars/elder_irwin',
'chars/trader_mila'
];
constructor(readonly engine: Engine) {
this.saves = new SaveManager(window.localStorage);
this.assets = new AssetLoader((key) => `${import.meta.env.BASE_URL}assets/${key}.png`);
}
get scenes(): SceneManager {
return this.engine.scenes;
}
get renderer(): Renderer {
return this.engine.renderer;
}
get camera() {
return this.engine.camera;
}
get worldRoot() {
return this.engine.renderer.worldRoot;
}
}