partey_workadventure/front/src/index.ts

172 lines
5.2 KiB
TypeScript
Raw Normal View History

import "phaser";
2020-04-03 14:56:21 +02:00
import GameConfig = Phaser.Types.Core.GameConfig;
import "../style/index.scss";
2022-01-05 10:27:40 +01:00
import { DEBUG_MODE } from "./Enum/EnvironmentVariable";
import { LoginScene } from "./Phaser/Login/LoginScene";
import { ReconnectingScene } from "./Phaser/Reconnecting/ReconnectingScene";
import { SelectCharacterScene } from "./Phaser/Login/SelectCharacterScene";
import { SelectCompanionScene } from "./Phaser/Login/SelectCompanionScene";
import { EnableCameraScene } from "./Phaser/Login/EnableCameraScene";
import { CustomizeScene } from "./Phaser/Login/CustomizeScene";
import WebFontLoaderPlugin from "phaser3-rex-plugins/plugins/webfontloader-plugin.js";
import OutlinePipelinePlugin from "phaser3-rex-plugins/plugins/outlinepipeline-plugin.js";
import { EntryScene } from "./Phaser/Login/EntryScene";
import { coWebsiteManager } from "./WebRtc/CoWebsiteManager";
import { localUserStore } from "./Connexion/LocalUserStore";
import { ErrorScene } from "./Phaser/Reconnecting/ErrorScene";
import { iframeListener } from "./Api/IframeListener";
2022-02-22 16:57:56 +01:00
import { desktopApi } from "./Api/desktop/index";
import { HdpiManager } from "./Phaser/Services/HdpiManager";
import { waScaleManager } from "./Phaser/Services/WaScaleManager";
import { Game } from "./Phaser/Game/Game";
import App from "./Components/App.svelte";
import { HtmlUtils } from "./WebRtc/HtmlUtils";
import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer;
const { width, height } = coWebsiteManager.getGameSize();
const valueGameQuality = localUserStore.getGameQualityValue();
const fps: Phaser.Types.Core.FPSConfig = {
2020-11-25 01:19:19 +01:00
/**
* The minimum acceptable rendering rate, in frames per second.
*/
min: valueGameQuality,
2020-11-25 01:19:19 +01:00
/**
* The optimum rendering rate, in frames per second.
*/
target: valueGameQuality,
2020-11-25 01:19:19 +01:00
/**
* Use setTimeout instead of requestAnimationFrame to run the game loop.
*/
2021-04-21 10:37:20 +02:00
forceSetTimeOut: false,
2020-11-25 01:19:19 +01:00
/**
* Calculate the average frame delta from this many consecutive frame intervals.
*/
deltaHistory: 120,
/**
* The amount of frames the time step counts before we trust the delta values again.
*/
panicMax: 20,
/**
* Apply delta smoothing during the game update to help avoid spikes?
*/
smoothStep: false,
};
// the ?phaserMode=canvas parameter can be used to force Canvas usage
2021-01-25 12:02:00 +01:00
const params = new URLSearchParams(document.location.search.substring(1));
const phaserMode = params.get("phaserMode");
let mode: number;
switch (phaserMode) {
case "auto":
case null:
mode = Phaser.AUTO;
break;
case "canvas":
mode = Phaser.CANVAS;
break;
case "webgl":
mode = Phaser.WEBGL;
break;
default:
throw new Error('phaserMode parameter must be one of "auto", "canvas" or "webgl"');
}
const hdpiManager = new HdpiManager(640 * 480, 196 * 196);
const { game: gameSize, real: realSize } = hdpiManager.getOptimalGameSize({ width, height });
2020-04-03 14:56:21 +02:00
const config: GameConfig = {
type: mode,
title: "WorkAdventure",
scale: {
parent: "game",
width: gameSize.width,
height: gameSize.height,
zoom: realSize.width / gameSize.width,
autoRound: true,
resizeInterval: 999999999999,
},
scene: [
EntryScene,
LoginScene,
SelectCharacterScene,
SelectCompanionScene,
EnableCameraScene,
ReconnectingScene,
ErrorScene,
CustomizeScene,
],
//resolution: window.devicePixelRatio / 2,
2020-11-25 01:19:19 +01:00
fps: fps,
dom: {
createContainer: true,
},
render: {
pixelArt: true,
roundPixels: true,
antialias: false,
},
plugins: {
global: [
{
key: "rexWebFontLoader",
plugin: WebFontLoaderPlugin,
start: true,
},
],
},
2020-04-11 18:17:36 +02:00
physics: {
default: "arcade",
arcade: {
debug: DEBUG_MODE,
},
},
// Instruct systems with 2 GPU to choose the low power one. We don't need that extra power and we want to save battery
powerPreference: "low-power",
callbacks: {
postBoot: (game) => {
// Install rexOutlinePipeline only if the renderer is WebGL.
const renderer = game.renderer;
if (renderer instanceof WebGLRenderer) {
game.plugins.install("rexOutlinePipeline", OutlinePipelinePlugin, true);
}
},
},
2020-04-03 14:56:21 +02:00
};
const game = new Game(config);
waScaleManager.setGame(game);
2022-04-02 00:18:22 +02:00
/*
TODO: replace with disableContextMenu when Phaser does not disable context menu on document.body
see https://github.com/photonstorm/phaser/issues/6064
*/
HtmlUtils.querySelectorOrFail("#game canvas").addEventListener("contextmenu", function (e) {
e.preventDefault();
});
window.addEventListener("resize", function () {
2021-10-07 14:44:15 +02:00
coWebsiteManager.resetStyleMain();
waScaleManager.applyNewSize();
waScaleManager.refreshFocusOnTarget();
});
coWebsiteManager.onResize.subscribe(() => {
waScaleManager.applyNewSize();
waScaleManager.refreshFocusOnTarget();
2020-05-13 16:17:58 +02:00
});
iframeListener.init();
2022-02-22 16:57:56 +01:00
desktopApi.init();
2021-05-11 17:37:21 +02:00
const app = new App({
2022-01-05 10:27:40 +01:00
target: HtmlUtils.getElementByIdOrFail("game-overlay"),
2021-05-31 12:06:11 +02:00
props: {
game: game,
2021-05-31 12:06:11 +02:00
},
});
2021-05-11 17:37:21 +02:00
export default app;