immersive2/src/vrApp.ts

110 lines
3.7 KiB
TypeScript

import {Color3, Engine, FreeCamera, Scene, Vector3} from "@babylonjs/core";
import '@babylonjs/loaders';
import {DiagramManager} from "./diagram/diagramManager";
import log, {Logger} from "loglevel";
import {GamepadManager} from "./controllers/gamepadManager";
import {CustomEnvironment} from "./util/customEnvironment";
import {Spinner} from "./util/spinner";
import {PouchdbPersistenceManager} from "./integration/pouchdbPersistenceManager";
import {addSceneInspector} from "./util/functions/sceneInspctor";
import {groundMeshObserver} from "./util/functions/groundMeshObserver";
import {MainMenu} from "./menus/mainMenu";
import {buildQuestLink} from "./util/functions/buildQuestLink";
import {exportGltf} from "./util/functions/exportGltf";
export class VrApp {
private scene: Scene;
private engine: Engine;
//preTasks = [havokModule];
private logger: Logger = log.getLogger('App');
constructor() {
//log.getLogger('App').setLevel('debug');
//log.getLogger('DiagramManager').setLevel('debug');
log.resetLevel();
log.setDefaultLevel('error');
const canvas = document.querySelector('#gameCanvas');
this.logger.debug('App', 'gameCanvas created');
}
public async initialize(canvas: HTMLCanvasElement) {
this.engine = new Engine(canvas, true);
this.engine.setHardwareScalingLevel(1 / window.devicePixelRatio);
window.onresize = () => {
this.engine.resize();
}
const scene = new Scene(this.engine);
this.scene = scene;
this.scene.ambientColor = new Color3(.1, .1, .1);
const spinner = new Spinner(scene);
spinner.show();
//const config = new AppConfig();
const diagramManager = new DiagramManager(scene);
const db = new PouchdbPersistenceManager();
db.setDiagramManager(diagramManager);
db.configObserver.add((newConfig) => {
if (!newConfig.demoCompleted) {
const main = document.querySelector('#main');
} else {
const create = document.querySelector('#create');
}
diagramManager.config.onConfigChangedObservable.notifyObservers(newConfig, 1);
});
diagramManager.config.onConfigChangedObservable.add((newConfig) => {
db.setConfig(newConfig);
}, 2, false, this);
await db.initialize();
const camera: FreeCamera = new FreeCamera("Main Camera",
new Vector3(0, 1.6, 0), scene);
//camera.setTarget(new Vector3(0, 1.6, -3));
scene.setActiveCameraByName("Main Camera");
const environment = new CustomEnvironment(scene, "default", diagramManager.config);
environment.groundMeshObservable.add((ground) => {
groundMeshObserver(ground, scene, diagramManager, diagramManager.controllers, spinner);
}, -1, false, this);
const gamepadManager = new GamepadManager(scene);
/*
*/
addSceneInspector(scene);
const mainMenu = new MainMenu(scene);
const el = document.querySelector('#download');
if (el) {
el.addEventListener('click', () => {
exportGltf(scene);
})
}
this.logger.info('keydown event listener added, use Ctrl+Shift+Alt+I to toggle debug layer');
let i = 0;
this.engine.runRenderLoop(() => {
this.scene.render();
if (i++ % 60 == 0) {
}
});
this.logger.info('Render loop started');
}
public async start() {
}
}
const vrApp = new VrApp();
const canvas = (document.querySelector('#gameCanvas') as HTMLCanvasElement);
vrApp.initialize(canvas).then(() => {
buildQuestLink();
});