workadventure/front/src/index.ts

104 lines
3.5 KiB
TypeScript
Raw Normal View History

2020-04-03 14:56:21 +02:00
import 'phaser';
import GameConfig = Phaser.Types.Core.GameConfig;
2020-08-31 12:18:00 +02:00
import {DEBUG_MODE, JITSI_URL, RESOLUTION} from "./Enum/EnvironmentVariable";
2020-04-14 20:04:55 +02:00
import {cypressAsserter} from "./Cypress/CypressAsserter";
import {LoginScene} from "./Phaser/Login/LoginScene";
import {ReconnectingScene} from "./Phaser/Reconnecting/ReconnectingScene";
import {SelectCharacterScene} from "./Phaser/Login/SelectCharacterScene";
2020-06-23 12:24:36 +02:00
import {EnableCameraScene} from "./Phaser/Login/EnableCameraScene";
import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene";
import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer;
import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline";
2020-07-28 11:06:08 +02:00
import {CustomizeScene} from "./Phaser/Login/CustomizeScene";
2020-10-07 18:03:34 +02:00
import {ResizableScene} from "./Phaser/Login/ResizableScene";
import {EntryScene} from "./Phaser/Login/EntryScene";
import {coWebsiteManager} from "./WebRtc/CoWebsiteManager";
import {MenuScene} from "./Phaser/Menu/MenuScene";
import {localUserStore} from "./Connexion/LocalUserStore";
2020-08-31 12:18:00 +02:00
// Load Jitsi if the environment variable is set.
if (JITSI_URL) {
const jitsiScript = document.createElement('script');
jitsiScript.src = 'https://' + JITSI_URL + '/external_api.js';
document.head.appendChild(jitsiScript);
}
const {width, height} = coWebsiteManager.getGameSize();
2020-04-07 20:41:35 +02:00
const valueGameQuality = localUserStore.getGameQualityValue();
2020-11-25 01:19:19 +01:00
const fps : Phaser.Types.Core.FPSConfig = {
/**
* 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.
*/
forceSetTimeOut: true,
/**
* 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
}
2020-04-03 14:56:21 +02:00
const config: GameConfig = {
2020-11-25 01:35:42 +01:00
type: Phaser.AUTO,
title: "WorkAdventure",
width: width / RESOLUTION,
height: height / RESOLUTION,
2020-04-03 14:56:21 +02:00
parent: "game",
scene: [EntryScene, LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene, MenuScene],
zoom: RESOLUTION,
2020-11-25 01:19:19 +01:00
fps: fps,
dom: {
createContainer: true
},
2020-04-11 18:17:36 +02:00
physics: {
default: "arcade",
arcade: {
debug: DEBUG_MODE,
}
},
callbacks: {
postBoot: game => {
const renderer = game.renderer;
if (renderer instanceof WebGLRenderer) {
renderer.pipelines.add(OutlinePipeline.KEY, new OutlinePipeline(game));
}
}
}
2020-04-03 14:56:21 +02:00
};
2020-04-14 20:04:55 +02:00
cypressAsserter.gameStarted();
2020-06-09 23:13:26 +02:00
const game = new Phaser.Game(config);
window.addEventListener('resize', function (event) {
const {width, height} = coWebsiteManager.getGameSize();
game.scale.resize(width / RESOLUTION, height / RESOLUTION);
2020-10-07 18:03:34 +02:00
// Let's trigger the onResize method of any active scene that is a ResizableScene
for (const scene of game.scene.getScenes(true)) {
if (scene instanceof ResizableScene) {
scene.onResize(event);
}
}
});
coWebsiteManager.onStateChange(() => {
const {width, height} = coWebsiteManager.getGameSize();
game.scale.resize(width / RESOLUTION, height / RESOLUTION);
2020-05-13 16:17:58 +02:00
});