From c654f722e31708db06d15110703b438a99801ceb Mon Sep 17 00:00:00 2001 From: GRL Date: Fri, 19 Mar 2021 11:50:53 +0100 Subject: [PATCH] Add Firefox image Check permissions in the game Button Continue to continue without allowing camera and microphone --- .../resources/html/helpCameraSettings.html | 6 +- ...help-setting-camera-permission-chrome.png} | Bin ...help-setting-camera-permission-firefox.png | Bin 0 -> 32958 bytes front/src/Phaser/Game/GameScene.ts | 145 ++++++++++++++---- front/src/Phaser/Login/EnableCameraScene.ts | 86 ++--------- 5 files changed, 125 insertions(+), 112 deletions(-) rename front/dist/resources/objects/{help-setting-camera-permission.png => help-setting-camera-permission-chrome.png} (100%) create mode 100644 front/dist/resources/objects/help-setting-camera-permission-firefox.png diff --git a/front/dist/resources/html/helpCameraSettings.html b/front/dist/resources/html/helpCameraSettings.html index 6ec6fbac..d1c0e04d 100644 --- a/front/dist/resources/html/helpCameraSettings.html +++ b/front/dist/resources/html/helpCameraSettings.html @@ -76,7 +76,7 @@ margin: 0px 20px; } #helpCameraSettings section p.err{ - color: red; + color: #ff0000; } #helpCameraSettings section ul{ margin: 6px; @@ -101,9 +101,11 @@
  • Please ensure that you have a camera AND microphone plugged into your computer.
  • Once you've followed these steps, please refresh this page.

    - +

    If you prefer to continue without allowing camera and microphone access, click on Continue

    +

    +
    diff --git a/front/dist/resources/objects/help-setting-camera-permission.png b/front/dist/resources/objects/help-setting-camera-permission-chrome.png similarity index 100% rename from front/dist/resources/objects/help-setting-camera-permission.png rename to front/dist/resources/objects/help-setting-camera-permission-chrome.png diff --git a/front/dist/resources/objects/help-setting-camera-permission-firefox.png b/front/dist/resources/objects/help-setting-camera-permission-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..7144f88b926f04f56a0bf30d81d5c63740746682 GIT binary patch literal 32958 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%0AQ=G_xAT{fz;*%*mIs3{jEn(h69?6G_OMI+CcH6n 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 AX8-^I literal 0 HcmV?d00001 diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 4dabf5cd..9580719d 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -63,6 +63,8 @@ import CanvasTexture = Phaser.Textures.CanvasTexture; import GameObject = Phaser.GameObjects.GameObject; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {Subscription} from "rxjs"; +import {tryCatch} from "rxjs/internal-compatibility"; +import {HtmlUtils} from "../../WebRtc/HtmlUtils"; export interface GameSceneInitInterface { initPosition: PointInterface|null, @@ -100,6 +102,7 @@ interface DeleteGroupEventInterface { } const defaultStartLayerName = 'start'; +const helpCameraSettings = 'helpCameraSettings'; export class GameScene extends ResizableScene implements CenterListener { Terrains : Array; @@ -127,6 +130,8 @@ export class GameScene extends ResizableScene implements CenterListener { // A promise that will resolve when the "create" method is called (signaling loading is ended) private createPromise: Promise; private createPromiseResolve!: (value?: void | PromiseLike) => void; + private helpCameraSettingsElement!: Phaser.GameObjects.DOMElement; //#700 + private helpCameraSettingsOpened: boolean = false; //#700 MapUrlFile: string; RoomId: string; @@ -207,6 +212,7 @@ export class GameScene extends ResizableScene implements CenterListener { this.load.spritesheet('layout_modes', 'resources/objects/layout_modes.png', {frameWidth: 32, frameHeight: 32}); this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); + this.load.html(helpCameraSettings, 'resources/html/helpCameraSettings.html'); //#700 addLoader(this); } @@ -544,6 +550,27 @@ export class GameScene extends ResizableScene implements CenterListener { //init user position and play trigger to check layers properties this.gameMap.setPosition(this.CurrentPlayer.x, this.CurrentPlayer.y); + + // #700 + const middleX = (window.innerWidth / 3) - (370*0.85); + this.helpCameraSettingsElement = this.add.dom(middleX, -800, undefined, {overflow: 'scroll'}).createFromCache(helpCameraSettings); + this.revealMenusAfterInit(this.helpCameraSettingsElement, helpCameraSettings); + this.helpCameraSettingsElement.addListener('click'); + this.helpCameraSettingsElement.on('click', (event:MouseEvent) => { + event.preventDefault(); + if((event?.target as HTMLInputElement).id === 'helpCameraSettingsFormRefresh') { + window.location.reload(); + }else if((event?.target as HTMLInputElement).id === 'helpCameraSettingsFormContinue') { + this.closeHelpCameraSettingsOpened(); + } + }); + if(this.helpCameraSettingsElement.parent){ + (this.helpCameraSettingsElement.parent as HTMLDivElement).style.overflow = 'scroll'; + } + + if(!mediaManager.constraintsMedia.audio || !mediaManager.constraintsMedia.video){ + this.openHelpCameraSettingsOpened(); //#700 + } }); } @@ -967,43 +994,44 @@ export class GameScene extends ResizableScene implements CenterListener { */ update(time: number, delta: number) : void { mediaManager.setLastUpdateScene(); - this.currentTick = time; - this.CurrentPlayer.moveUser(delta); + if(!this.helpCameraSettingsOpened) { + this.currentTick = time; + this.CurrentPlayer.moveUser(delta); - // Let's handle all events - while (this.pendingEvents.length !== 0) { - const event = this.pendingEvents.dequeue(); - switch (event.type) { - case "InitUserPositionEvent": - this.doInitUsersPosition(event.event); - break; - case "AddPlayerEvent": - this.doAddPlayer(event.event); - break; - case "RemovePlayerEvent": - this.doRemovePlayer(event.userId); - break; - case "UserMovedEvent": - this.doUpdatePlayerPosition(event.event); - break; - case "GroupCreatedUpdatedEvent": - this.doShareGroupPosition(event.event); - break; - case "DeleteGroupEvent": - this.doDeleteGroup(event.groupId); - break; + // Let's handle all events + while (this.pendingEvents.length !== 0) { + const event = this.pendingEvents.dequeue(); + switch (event.type) { + case "InitUserPositionEvent": + this.doInitUsersPosition(event.event); + break; + case "AddPlayerEvent": + this.doAddPlayer(event.event); + break; + case "RemovePlayerEvent": + this.doRemovePlayer(event.userId); + break; + case "UserMovedEvent": + this.doUpdatePlayerPosition(event.event); + break; + case "GroupCreatedUpdatedEvent": + this.doShareGroupPosition(event.event); + break; + case "DeleteGroupEvent": + this.doDeleteGroup(event.groupId); + break; + } } + // Let's move all users + const updatedPlayersPositions = this.playersPositionInterpolator.getUpdatedPositions(time); + updatedPlayersPositions.forEach((moveEvent: HasMovedEvent, userId: number) => { + const player: RemotePlayer | undefined = this.MapPlayersByKey.get(userId); + if (player === undefined) { + throw new Error('Cannot find player with ID "' + userId + '"'); + } + player.updatePosition(moveEvent); + }); } - - // Let's move all users - const updatedPlayersPositions = this.playersPositionInterpolator.getUpdatedPositions(time); - updatedPlayersPositions.forEach((moveEvent: HasMovedEvent, userId: number) => { - const player : RemotePlayer | undefined = this.MapPlayersByKey.get(userId); - if (player === undefined) { - throw new Error('Cannot find player with ID "' + userId +'"'); - } - player.updatePosition(moveEvent); - }); } /** @@ -1248,4 +1276,53 @@ export class GameScene extends ResizableScene implements CenterListener { }); } } + + //#700 + private openHelpCameraSettingsOpened(): void{ + HtmlUtils.getElementByIdOrFail('webRtcSetup').style.display = 'none'; + this.helpCameraSettingsOpened = true; + let middleY = (window.innerHeight / 3) - 275; + if(middleY < 0){ + middleY = 0; + } + let middleX = (window.innerWidth / 3) - 50; + if(middleX < 0){ + middleX = 0; + } + if(window.navigator.userAgent.indexOf('Firefox') != -1){ + HtmlUtils.getElementByIdOrFail('browserHelpSetting').innerHTML =''; + }else if(window.navigator.userAgent.indexOf('Chrome') != -1){ + HtmlUtils.getElementByIdOrFail('browserHelpSetting').innerHTML =''; + } + this.tweens.add({ + targets: this.helpCameraSettingsElement, + y: this.startY - (370/2), + x: this.startX - (400/2), + duration: 1000, + ease: 'Power3', + overflow: 'scroll' + }); + } + + private closeHelpCameraSettingsOpened(): void{ + const helpCameraSettingsInfo = this.helpCameraSettingsElement.getChildByID('helpCameraSettings') as HTMLParagraphElement; + helpCameraSettingsInfo.innerText = ''; + helpCameraSettingsInfo.style.display = 'none'; + this.helpCameraSettingsOpened = false; + this.tweens.add({ + targets: this.helpCameraSettingsElement, + y: -400, + duration: 1000, + ease: 'Power3', + overflow: 'scroll' + }); + } + + private revealMenusAfterInit(menuElement: Phaser.GameObjects.DOMElement, rootDomId: string) { + //Dom elements will appear inside the viewer screen when creating before being moved out of it, which create a flicker effect. + //To prevent this, we put a 'hidden' attribute on the root element, we remove it only after the init is done. + setTimeout(() => { + (menuElement.getChildByID(rootDomId) as HTMLElement).hidden = false; + }, 250); + } } diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index dffe1042..3354d931 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -16,7 +16,6 @@ enum LoginTextures { arrowUp = "arrow_up" } -const helpCameraSettings = 'helpCameraSettings'; export class EnableCameraScene extends Phaser.Scene { private textField!: TextField; @@ -35,8 +34,6 @@ export class EnableCameraScene extends Phaser.Scene { private soundMeterSprite!: SoundMeterSprite; private microphoneNameField!: TextField; private repositionCallback!: (this: Window, ev: UIEvent) => void; - private helpCameraSettingsElement!: Phaser.GameObjects.DOMElement; - private helpCameraSettingsOpened: boolean = false; constructor() { super({ @@ -52,7 +49,6 @@ export class EnableCameraScene extends Phaser.Scene { this.load.image(LoginTextures.arrowUp, "resources/objects/arrow_up.png"); // Note: arcade.png from the Phaser 3 examples at: https://github.com/photonstorm/phaser3-examples/tree/master/public/assets/fonts/bitmap this.load.bitmapFont(LoginTextures.mainFont, 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); - this.load.html(helpCameraSettings, 'resources/html/helpCameraSettings.html'); } create() { @@ -112,27 +108,6 @@ export class EnableCameraScene extends Phaser.Scene { this.soundMeterSprite.setVisible(false); this.add.existing(this.soundMeterSprite); - const middleX = (window.innerWidth / 3) - (370*0.85); - this.helpCameraSettingsElement = this.add.dom(middleX, -800, undefined, {overflow: 'scroll'}).createFromCache(helpCameraSettings); - this.revealMenusAfterInit(this.helpCameraSettingsElement, helpCameraSettings); - this.helpCameraSettingsElement.addListener('click'); - this.helpCameraSettingsElement.on('click', (event:MouseEvent) => { - event.preventDefault(); - if((event?.target as HTMLInputElement).id !== 'helpCameraSettingsFormRefresh') { - return; - } - const permission: Element = this.helpCameraSettingsElement.getChildByID('permissionError'); - permission.innerHTML = ''; - return mediaManager.getCamera().then(() => { - window.location.reload(); - }).catch((err) => { - permission.innerHTML = err.message; - }); - }); - if(this.helpCameraSettingsElement.parent){ - (this.helpCameraSettingsElement.parent as HTMLDivElement).style.overflow = 'scroll'; - } - this.repositionCallback = this.reposition.bind(this); window.addEventListener('resize', this.repositionCallback); } @@ -175,9 +150,6 @@ export class EnableCameraScene extends Phaser.Scene { * Function called each time a camera is changed */ private setupStream(stream: MediaStream): void { - if(this.helpCameraSettingsOpened){ - return; - } const img = HtmlUtils.getElementByIdOrFail('webRtcSetupNoVideo'); img.style.display = 'none'; @@ -284,27 +256,19 @@ export class EnableCameraScene extends Phaser.Scene { mediaManager.setLastUpdateScene(); } - private login(): Promise { - return mediaManager.getCamera() - .then((mediaStream: MediaStream) => { - HtmlUtils.getElementByIdOrFail('webRtcSetup').style.display = 'none'; - this.soundMeter.stop(); - window.removeEventListener('resize', this.repositionCallback); - mediaManager.stopCamera(); - mediaManager.stopMicrophone(); - this.scene.sleep(EnableCameraSceneName) - gameManager.goToStartingMap(this.scene); - return mediaStream; - }).catch((err) => { - this.openHelpCameraSettingsOpened(); - throw err; - }); + private login(): void { + HtmlUtils.getElementByIdOrFail('webRtcSetup').style.display = 'none'; + this.soundMeter.stop(); + window.removeEventListener('resize', this.repositionCallback); + + mediaManager.stopCamera(); + mediaManager.stopMicrophone(); + + this.scene.sleep(EnableCameraSceneName) + gameManager.goToStartingMap(this.scene); } private async getDevices() { - if(this.helpCameraSettingsOpened){ - return; - } const mediaDeviceInfos = await navigator.mediaDevices.enumerateDevices(); for (const mediaDeviceInfo of mediaDeviceInfos) { if (mediaDeviceInfo.kind === 'audioinput') { @@ -316,36 +280,6 @@ export class EnableCameraScene extends Phaser.Scene { this.updateWebCamName(); } - private openHelpCameraSettingsOpened(): void{ - this.reset(); - HtmlUtils.getElementByIdOrFail('webRtcSetup').style.display = 'none'; - this.helpCameraSettingsOpened = true; - let middleY = (window.innerHeight / 3) - (495); - if(middleY < 0){ - middleY = 0; - } - let middleX = (window.innerWidth / 3) - (370*0.85); - if(middleX < 0){ - middleX = 0; - } - this.tweens.add({ - targets: this.helpCameraSettingsElement, - y: middleY, - x: middleX, - duration: 1000, - ease: 'Power3', - overflow: 'scroll' - }); - } - - private revealMenusAfterInit(menuElement: Phaser.GameObjects.DOMElement, rootDomId: string) { - //Dom elements will appear inside the viewer screen when creating before being moved out of it, which create a flicker effect. - //To prevent this, we put a 'hidden' attribute on the root element, we remove it only after the init is done. - setTimeout(() => { - (menuElement.getChildByID(rootDomId) as HTMLElement).hidden = false; - }, 250); - } - private reset(){ this.textField.destroy(); this.pressReturnField.destroy();