Add Binding 2.0 asset pack
This commit is contained in:
+18
-7
@@ -13,6 +13,7 @@ import { ThreeRenderer } from './render/ThreeRenderer';
|
||||
import { HudOverlay } from './render/HudOverlay';
|
||||
import { GameLoop } from './engine/GameLoop';
|
||||
import { StartMenu } from './ui/StartMenu';
|
||||
import { ASSET_PACKS, type AssetPack } from './render/assetPacks';
|
||||
|
||||
function boot(): void {
|
||||
const world = document.getElementById('game') as HTMLCanvasElement | null;
|
||||
@@ -24,21 +25,27 @@ function boot(): void {
|
||||
return;
|
||||
}
|
||||
|
||||
// Рендер и ввод создаём один раз — они переиспользуются между забегами.
|
||||
// Ввод живёт всё приложение; рендер создаётся на забег, потому что зависит от пака ассетов.
|
||||
const controller = new KeyboardController();
|
||||
const world3d = new ThreeRenderer(world);
|
||||
const hud = new HudOverlay(hudCanvas);
|
||||
controller.attach();
|
||||
|
||||
let loop: GameLoop | null = null;
|
||||
let world3d: ThreeRenderer | null = null;
|
||||
let hud: HudOverlay | null = null;
|
||||
|
||||
const startGame = (rules: LevelRules): void => {
|
||||
const startGame = (rules: LevelRules, assetPack: AssetPack): void => {
|
||||
loop?.stop();
|
||||
world3d?.dispose();
|
||||
hud?.dispose();
|
||||
controller.reset(); // чистый ввод: не тащим зажатые клавиши/смену оружия из прошлого забега
|
||||
const game = new Game(rules);
|
||||
const currentWorld = new ThreeRenderer(world, assetPack.path);
|
||||
const currentHud = new HudOverlay(hudCanvas, assetPack.path);
|
||||
world3d = currentWorld;
|
||||
hud = currentHud;
|
||||
loop = new GameLoop(game, controller, (alpha) => {
|
||||
world3d.render(game, alpha);
|
||||
hud.render(game);
|
||||
currentWorld.render(game, alpha);
|
||||
currentHud.render(game);
|
||||
});
|
||||
menu.hide();
|
||||
loop.start();
|
||||
@@ -49,10 +56,14 @@ function boot(): void {
|
||||
const toMenu = (): void => {
|
||||
loop?.stop();
|
||||
loop = null;
|
||||
world3d?.dispose();
|
||||
hud?.dispose();
|
||||
world3d = null;
|
||||
hud = null;
|
||||
menu.show(); // фон меню перекрывает «замёрзший» последний кадр
|
||||
};
|
||||
|
||||
const menu = new StartMenu(menuEl, PRESETS, startGame);
|
||||
const menu = new StartMenu(menuEl, PRESETS, ASSET_PACKS, startGame);
|
||||
menu.show();
|
||||
|
||||
// Esc во время игры — вернуться к выбору уровня (по физической клавише).
|
||||
|
||||
Reference in New Issue
Block a user