From 905bd079ec65b38e781025341889e4e69405ffd1 Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Wed, 12 Jan 2022 12:58:27 +0100 Subject: [PATCH] camera is now properly focusing on target when zooming, if any --- front/src/Phaser/Game/CameraManager.ts | 2 -- front/src/Phaser/Game/GameScene.ts | 4 ++-- front/src/Phaser/Services/WaScaleManager.ts | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/front/src/Phaser/Game/CameraManager.ts b/front/src/Phaser/Game/CameraManager.ts index b5de87d2..55ff34de 100644 --- a/front/src/Phaser/Game/CameraManager.ts +++ b/front/src/Phaser/Game/CameraManager.ts @@ -19,7 +19,6 @@ export class CameraManager extends Phaser.Events.EventEmitter { private cameraMode: CameraMode = CameraMode.Free; - private cameraLockedDelayedCall: Phaser.Time.TimerEvent | undefined; private restoreZoomTween?: Phaser.Tweens.Tween; private startFollowTween?: Phaser.Tweens.Tween; @@ -85,7 +84,6 @@ export class CameraManager extends Phaser.Events.EventEmitter { } public leaveFocusMode(player: Player, duration = 0): void { - this.cameraLocked = false; this.waScaleManager.setFocusTarget(); this.unlockCameraWithDelay(duration); this.startFollow(player, duration); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index f1f5389e..3c95205d 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -12,7 +12,7 @@ import { UserInputManager } from "../UserInput/UserInputManager"; import { gameManager } from "./GameManager"; import { touchScreenManager } from "../../Touch/TouchScreenManager"; import { PinchManager } from "../UserInput/PinchManager"; -import { waScaleManager } from "../Services/WaScaleManager"; +import { waScaleManager, WaScaleManagerEvent } from "../Services/WaScaleManager"; import { EmoteManager } from "./EmoteManager"; import { soundManager } from "./SoundManager"; import { SharedVariablesManager } from "./SharedVariablesManager"; @@ -2125,7 +2125,7 @@ ${escapedMessage} if (this.cameraManager.isCameraLocked()) { return; } - waScaleManager.zoomModifier *= zoomFactor; + waScaleManager.handleZoomByFactor(zoomFactor); biggestAvailableAreaStore.recompute(); } diff --git a/front/src/Phaser/Services/WaScaleManager.ts b/front/src/Phaser/Services/WaScaleManager.ts index c0c01402..0cf189b1 100644 --- a/front/src/Phaser/Services/WaScaleManager.ts +++ b/front/src/Phaser/Services/WaScaleManager.ts @@ -5,6 +5,10 @@ import type { Game } from "../Game/Game"; import { ResizableScene } from "../Login/ResizableScene"; import { HtmlUtils } from "../../WebRtc/HtmlUtils"; +export enum WaScaleManagerEvent { + RefreshFocusOnTarget = "wa-scale-manager:refresh-focus-on-target", +} + export class WaScaleManager { private hdpiManager: HdpiManager; private scaleManager!: ScaleManager; @@ -69,7 +73,7 @@ export class WaScaleManager { return; } this.zoomModifier = this.getTargetZoomModifierFor(this.focusTarget.width, this.focusTarget.height); - this.game.events.emit("wa-scale-manager:refresh-focus-on-target", this.focusTarget); + this.game.events.emit(WaScaleManagerEvent.RefreshFocusOnTarget, this.focusTarget); } public setFocusTarget(targetDimensions?: { x: number; y: number; width: number; height: number }): void { @@ -98,6 +102,17 @@ export class WaScaleManager { this.applyNewSize(); } + public handleZoomByFactor(zoomFactor: number): void { + this.zoomModifier *= zoomFactor; + if (this.focusTarget) { + this.game.events.emit(WaScaleManagerEvent.RefreshFocusOnTarget, this.focusTarget); + } + } + + public getFocusTarget(): { x: number; y: number; width: number; height: number } | undefined { + return this.focusTarget; + } + public saveZoom(): void { this._saveZoom = this.hdpiManager.zoomModifier; }