/
difight
/
ruEngine
Обзор
Документация
Войти
/
difight
/
ruEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
client/src/engine/GameEngine.ts
92 строки
3 KB
Andrey Bashkirev
Немного переделал архитектуру
05 авг 2025, 17:15
05 авг 2025, 17:15
144f0db
Код
Авторство
О чём код?
// src/engine/GameEngine.ts import { GameCore } from "./core/GameCore"; import { GameStateManager } from "./core/states/GameStateManager"; import { UIManager } from "./core/ui/UIManager"; import { BaseGameStateHandler } from "./core/states/BaseGameStateHandler"; import { SceneManager } from "./core/scenes/SceneManager"; import { Scene } from "./core/scenes/Scene"; /** * Главный класс игрового движка. Инкапсулирует работу с ядром, состояниями, сценами и UI. */ export class GameEngine { private readonly gameCore: GameCore; private readonly uiManager: UIManager; public readonly gameStateManager: GameStateManager; public readonly canvas: HTMLCanvasElement; private readonly sceneManager: SceneManager; private readonly stateToScene: Map<string, string> = new Map(); /** * @param canvas HTML-канвас для рендера * @param initialState Имя начального состояния */ constructor(canvas: HTMLCanvasElement, initialState: string) { this.canvas = canvas; this.gameStateManager = GameStateManager.getInstance(initialState); this.uiManager = UIManager.getInstance(); this.uiManager.init(canvas); this.sceneManager = SceneManager.getInstance(); this.gameCore = new GameCore(this.gameStateManager); } /** * Регистрирует обработчик состояния * @param stateName Имя состояния * @param handler Фабрика обработчика состояния */ /** * Регистрирует обработчик состояния и связывает его с именем сцены (опционально) */ public registerState(stateName: string, handler: () => BaseGameStateHandler, sceneName?: string): void { this.gameStateManager.registerHandler(stateName, handler()); if (sceneName) { this.stateToScene.set(stateName, sceneName); } } /** * Устанавливает начальное состояние * @param stateName Имя состояния */ public setInitialState(stateName: string): void { this.changeState(stateName); } /** * Регистрирует сцену * @param name Имя сцены * @param scene Экземпляр сцены */ public registerScene(name: string, scene: Scene): void { this.sceneManager.registerScene(name, scene); const ctx = this.canvas.getContext("2d"); if (!ctx) { throw new Error("Failed to get 2D rendering context for scene"); } scene.setContext(ctx); } /** * Переключает состояние * @param stateName Имя состояния */ public changeState(stateName: string): void { this.gameStateManager.changeState(stateName); const sceneName = this.stateToScene.get(stateName); if (sceneName) { this.sceneManager.changeState(sceneName); } } /** Запускает игровой цикл */ public start(): void { this.gameCore.start(); } /** Останавливает игровой цикл */ public stop(): void { this.gameCore.stop(); } }