46 lines
1.7 KiB
JavaScript
46 lines
1.7 KiB
JavaScript
import { ViewMenu, ViewLevels, ViewGame } from "./index.js";
|
|
export var EViewType;
|
|
(function (EViewType) {
|
|
EViewType[EViewType["None"] = 0] = "None";
|
|
EViewType[EViewType["Menu"] = 1] = "Menu";
|
|
EViewType[EViewType["Levels"] = 2] = "Levels";
|
|
EViewType[EViewType["Game"] = 3] = "Game";
|
|
})(EViewType || (EViewType = {}));
|
|
export class ViewManager {
|
|
_viewMap;
|
|
_currentViewType;
|
|
_app;
|
|
constructor() {
|
|
this._viewMap = new Map();
|
|
this._currentViewType = EViewType.None;
|
|
this._app = document.getElementById("app");
|
|
}
|
|
async loadAsync(gdRoot) {
|
|
const viewManager = this;
|
|
this._viewMap.set(EViewType.Menu, new ViewMenu(await this.loadView("menu"), viewManager));
|
|
this._viewMap.set(EViewType.Levels, new ViewLevels(await this.loadView("levels"), viewManager));
|
|
this._viewMap.set(EViewType.Game, new ViewGame(await this.loadView("game"), gdRoot, viewManager));
|
|
}
|
|
showView(viewType) {
|
|
const oldView = this._viewMap.get(this._currentViewType);
|
|
if (!!oldView) {
|
|
oldView.deactivate();
|
|
this._currentViewType = EViewType.None;
|
|
}
|
|
const newView = this._viewMap.get(viewType);
|
|
if (!!newView) {
|
|
this._app.innerHTML = newView.div;
|
|
this._currentViewType = viewType;
|
|
newView.activate();
|
|
}
|
|
}
|
|
async loadView(viewName) {
|
|
const response = await fetch(`views/${viewName}.html`);
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to load view: ${viewName}`);
|
|
}
|
|
const html = await response.text();
|
|
return html;
|
|
}
|
|
}
|
|
//# sourceMappingURL=ViewManager.js.map
|