From 6128f1e4315ddd403255e5a1dd059ffc4c3efe50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 18 May 2021 09:42:01 +0200 Subject: [PATCH] Making sure Physics is not enabled several times As part of an energy saving measure, we started disabling physics when the character is not moving and enabling physics again only when the character moves. However, we enabled Physics on each frame the characeter was moving. As a result, the Physics system would run several times, slowly slowing the computer down. This fixes this issue by adding a flag to only enable Physics once. --- front/src/Phaser/Game/GameScene.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 7b968615..977c6f3b 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -186,6 +186,7 @@ export class GameScene extends DirtyScene implements CenterListener { private popUpElements : Map = new Map(); private originalMapUrl: string|undefined; private pinchManager: PinchManager|undefined; + private physicsEnabled: boolean = true; private mapTransitioning: boolean = false; //used to prevent transitions happenning at the same time. private onVisibilityChangeCallback: () => void; @@ -1088,6 +1089,7 @@ ${escapedMessage} createCollisionWithPlayer() { this.physics.disableUpdate(); + this.physicsEnabled = false; //add collision layer this.Layers.forEach((Layer: Phaser.Tilemaps.TilemapLayer) => { this.physics.add.collider(this.CurrentPlayer, Layer, (object1: GameObject, object2: GameObject) => { @@ -1227,12 +1229,15 @@ ${escapedMessage} this.CurrentPlayer.moveUser(delta); if (this.CurrentPlayer.isMoving()) { this.dirty = true; - this.physics.enableUpdate(); - } else { + if (!this.physicsEnabled) { + this.physics.enableUpdate(); + this.physicsEnabled = true; + } + } else if (this.physicsEnabled) { this.physics.disableUpdate(); + this.physicsEnabled = false; } - // Let's handle all events while (this.pendingEvents.length !== 0) { this.dirty = true;