WIP: Bypass camera scene (#1337)
* Set new local camera setup variable * Finish by pass video settings - TODO add button to update camera settings Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com> * Merge branch 'develop' into jumpVideoCamera Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com> # Conflicts: # front/src/Connexion/LocalUserStore.ts # front/src/Phaser/Components/Loader.ts # front/src/Phaser/Game/GameManager.ts # front/src/Phaser/Login/EnableCameraScene.ts * Add menu to open enable camera scene Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com> * Finish jump camera setup Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
This commit is contained in:
parent
ce16dab65f
commit
a0d863569b
@ -7,6 +7,8 @@
|
|||||||
import {loginSceneVisibleStore} from "../../Stores/LoginSceneStore";
|
import {loginSceneVisibleStore} from "../../Stores/LoginSceneStore";
|
||||||
import {selectCharacterSceneVisibleStore} from "../../Stores/SelectCharacterStore";
|
import {selectCharacterSceneVisibleStore} from "../../Stores/SelectCharacterStore";
|
||||||
import {SelectCharacterScene, SelectCharacterSceneName} from "../../Phaser/Login/SelectCharacterScene";
|
import {SelectCharacterScene, SelectCharacterSceneName} from "../../Phaser/Login/SelectCharacterScene";
|
||||||
|
import {EnableCameraScene, EnableCameraSceneName} from "../../Phaser/Login/EnableCameraScene";
|
||||||
|
import {enableCameraSceneVisibilityStore} from "../../Stores/MediaStore";
|
||||||
//import {connectionManager} from "../../Connexion/ConnectionManager";
|
//import {connectionManager} from "../../Connexion/ConnectionManager";
|
||||||
|
|
||||||
|
|
||||||
@ -33,6 +35,12 @@
|
|||||||
gameManager.leaveGame(SelectCharacterSceneName,new SelectCharacterScene());
|
gameManager.leaveGame(SelectCharacterSceneName,new SelectCharacterScene());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openEnableCameraScene(){
|
||||||
|
disableMenuStores();
|
||||||
|
enableCameraSceneVisibilityStore.showEnableCameraScene();
|
||||||
|
gameManager.leaveGame(EnableCameraSceneName,new EnableCameraScene());
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: Uncomment when login will be completely developed
|
//TODO: Uncomment when login will be completely developed
|
||||||
/*function clickLogin() {
|
/*function clickLogin() {
|
||||||
connectionManager.loadOpenIDScreen();
|
connectionManager.loadOpenIDScreen();
|
||||||
@ -50,6 +58,9 @@
|
|||||||
<section>
|
<section>
|
||||||
<button type="button" class="nes-btn" on:click|preventDefault={openEditCompanionScene}>Edit Companion</button>
|
<button type="button" class="nes-btn" on:click|preventDefault={openEditCompanionScene}>Edit Companion</button>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<button type="button" class="nes-btn" on:click|preventDefault={openEnableCameraScene}>Setup camera</button>
|
||||||
|
</section>
|
||||||
<!-- <section>
|
<!-- <section>
|
||||||
<button type="button" class="nes-btn is-primary" on:click|preventDefault={clickLogin}>Login</button>
|
<button type="button" class="nes-btn is-primary" on:click|preventDefault={clickLogin}>Login</button>
|
||||||
</section>-->
|
</section>-->
|
||||||
|
@ -17,6 +17,7 @@ const authToken = "authToken";
|
|||||||
const state = "state";
|
const state = "state";
|
||||||
const nonce = "nonce";
|
const nonce = "nonce";
|
||||||
const notification = "notificationPermission";
|
const notification = "notificationPermission";
|
||||||
|
const cameraSetup = "cameraSetup";
|
||||||
|
|
||||||
const cacheAPIIndex = "workavdenture-cache";
|
const cacheAPIIndex = "workavdenture-cache";
|
||||||
|
|
||||||
@ -174,6 +175,14 @@ class LocalUserStore {
|
|||||||
localStorage.removeItem(nonce);
|
localStorage.removeItem(nonce);
|
||||||
return oldValue;
|
return oldValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setCameraSetup(cameraId: string) {
|
||||||
|
localStorage.setItem(cameraSetup, cameraId);
|
||||||
|
}
|
||||||
|
getCameraSetup(): { video: unknown; audio: unknown } | undefined {
|
||||||
|
const cameraSetupValues = localStorage.getItem(cameraSetup);
|
||||||
|
return cameraSetupValues != undefined ? JSON.parse(cameraSetupValues) : undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const localUserStore = new LocalUserStore();
|
export const localUserStore = new LocalUserStore();
|
||||||
|
@ -70,3 +70,9 @@ export const addLoader = (scene: Phaser.Scene): void => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const removeLoader = (scene: Phaser.Scene): void => {
|
||||||
|
if (scene.load.textureManager.exists(LogoNameIndex)) {
|
||||||
|
scene.load.textureManager.remove(LogoNameIndex);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@ -18,6 +18,7 @@ export class GameManager {
|
|||||||
private characterLayers: string[] | null;
|
private characterLayers: string[] | null;
|
||||||
private companion: string | null;
|
private companion: string | null;
|
||||||
private startRoom!: Room;
|
private startRoom!: Room;
|
||||||
|
private cameraSetup?: { video: unknown; audio: unknown };
|
||||||
currentGameSceneName: string | null = null;
|
currentGameSceneName: string | null = null;
|
||||||
// Note: this scenePlugin is the scenePlugin of the EntryScene. We should always provide a key in methods called on this scenePlugin.
|
// Note: this scenePlugin is the scenePlugin of the EntryScene. We should always provide a key in methods called on this scenePlugin.
|
||||||
private scenePlugin!: Phaser.Scenes.ScenePlugin;
|
private scenePlugin!: Phaser.Scenes.ScenePlugin;
|
||||||
@ -26,6 +27,7 @@ export class GameManager {
|
|||||||
this.playerName = localUserStore.getName();
|
this.playerName = localUserStore.getName();
|
||||||
this.characterLayers = localUserStore.getCharacterLayers();
|
this.characterLayers = localUserStore.getCharacterLayers();
|
||||||
this.companion = localUserStore.getCompanion();
|
this.companion = localUserStore.getCompanion();
|
||||||
|
this.cameraSetup = localUserStore.getCameraSetup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async init(scenePlugin: Phaser.Scenes.ScenePlugin): Promise<string> {
|
public async init(scenePlugin: Phaser.Scenes.ScenePlugin): Promise<string> {
|
||||||
@ -37,8 +39,11 @@ export class GameManager {
|
|||||||
return LoginSceneName;
|
return LoginSceneName;
|
||||||
} else if (!this.characterLayers || !this.characterLayers.length) {
|
} else if (!this.characterLayers || !this.characterLayers.length) {
|
||||||
return SelectCharacterSceneName;
|
return SelectCharacterSceneName;
|
||||||
} else {
|
} else if (this.cameraSetup == undefined) {
|
||||||
return EnableCameraSceneName;
|
return EnableCameraSceneName;
|
||||||
|
} else {
|
||||||
|
this.activeMenuSceneAndHelpCameraSettings();
|
||||||
|
return this.startRoom.key;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +89,14 @@ export class GameManager {
|
|||||||
public goToStartingMap(): void {
|
public goToStartingMap(): void {
|
||||||
console.log("starting " + (this.currentGameSceneName || this.startRoom.key));
|
console.log("starting " + (this.currentGameSceneName || this.startRoom.key));
|
||||||
this.scenePlugin.start(this.currentGameSceneName || this.startRoom.key);
|
this.scenePlugin.start(this.currentGameSceneName || this.startRoom.key);
|
||||||
|
this.activeMenuSceneAndHelpCameraSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private activeMenuSceneAndHelpCameraSettings(): void {
|
||||||
if (
|
if (
|
||||||
!localUserStore.getHelpCameraSettingsShown() &&
|
!localUserStore.getHelpCameraSettingsShown() &&
|
||||||
(!get(requestedMicrophoneState) || !get(requestedCameraState))
|
(!get(requestedMicrophoneState) || !get(requestedCameraState))
|
||||||
|
@ -37,7 +37,7 @@ import { localUserStore } from "../../Connexion/LocalUserStore";
|
|||||||
import { HtmlUtils } from "../../WebRtc/HtmlUtils";
|
import { HtmlUtils } from "../../WebRtc/HtmlUtils";
|
||||||
import { mediaManager } from "../../WebRtc/MediaManager";
|
import { mediaManager } from "../../WebRtc/MediaManager";
|
||||||
import { SimplePeer } from "../../WebRtc/SimplePeer";
|
import { SimplePeer } from "../../WebRtc/SimplePeer";
|
||||||
import { addLoader } from "../Components/Loader";
|
import { addLoader, removeLoader } from "../Components/Loader";
|
||||||
import { OpenChatIcon, openChatIconName } from "../Components/OpenChatIcon";
|
import { OpenChatIcon, openChatIconName } from "../Components/OpenChatIcon";
|
||||||
import { lazyLoadPlayerCharacterTextures, loadCustomTexture } from "../Entity/PlayerTexturesLoadingManager";
|
import { lazyLoadPlayerCharacterTextures, loadCustomTexture } from "../Entity/PlayerTexturesLoadingManager";
|
||||||
import { RemotePlayer } from "../Entity/RemotePlayer";
|
import { RemotePlayer } from "../Entity/RemotePlayer";
|
||||||
@ -291,8 +291,11 @@ export class GameScene extends DirtyScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//once preloading is over, we don't want loading errors to crash the game, so we need to disable this behavior after preloading.
|
//once preloading is over, we don't want loading errors to crash the game, so we need to disable this behavior after preloading.
|
||||||
console.error("Error when loading: ", file);
|
|
||||||
if (this.preloading) {
|
if (this.preloading) {
|
||||||
|
//remove loader in progress
|
||||||
|
removeLoader(this);
|
||||||
|
|
||||||
|
//display an error scene
|
||||||
this.scene.start(ErrorSceneName, {
|
this.scene.start(ErrorSceneName, {
|
||||||
title: "Network error",
|
title: "Network error",
|
||||||
subTitle: "An error occurred while loading resource:",
|
subTitle: "An error occurred while loading resource:",
|
||||||
@ -1258,7 +1261,9 @@ ${escapedMessage}
|
|||||||
if (!targetRoom.isEqual(this.room)) {
|
if (!targetRoom.isEqual(this.room)) {
|
||||||
if (this.scene.get(targetRoom.key) === null) {
|
if (this.scene.get(targetRoom.key) === null) {
|
||||||
console.error("next room not loaded", targetRoom.key);
|
console.error("next room not loaded", targetRoom.key);
|
||||||
return;
|
// Try to load next dame room from exit URL
|
||||||
|
// The policy of room can to be updated during a session and not load before
|
||||||
|
await this.loadNextGameFromExitUrl(targetRoom.key);
|
||||||
}
|
}
|
||||||
this.cleanupClosingScene();
|
this.cleanupClosingScene();
|
||||||
this.scene.stop();
|
this.scene.stop();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import type { RoomConnection } from "../../Connexion/RoomConnection";
|
import type { RoomConnection } from "../../Connexion/RoomConnection";
|
||||||
import { iframeListener } from "../../Api/IframeListener";
|
import { iframeListener } from "../../Api/IframeListener";
|
||||||
import type { GameMap } from "./GameMap";
|
import type { GameMap } from "./GameMap";
|
||||||
import type {ITiledMapLayer, ITiledMapObject, ITiledMapObjectLayer} from "../Map/ITiledMap";
|
import type { ITiledMapLayer, ITiledMapObject, ITiledMapObjectLayer } from "../Map/ITiledMap";
|
||||||
|
|
||||||
interface Variable {
|
interface Variable {
|
||||||
defaultValue: unknown;
|
defaultValue: unknown;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { gameManager } from "../Game/GameManager";
|
import { gameManager } from "../Game/GameManager";
|
||||||
import { ResizableScene } from "./ResizableScene";
|
import { ResizableScene } from "./ResizableScene";
|
||||||
import { enableCameraSceneVisibilityStore } from "../../Stores/MediaStore";
|
import { enableCameraSceneVisibilityStore } from "../../Stores/MediaStore";
|
||||||
|
import { localUserStore } from "../../Connexion/LocalUserStore";
|
||||||
|
|
||||||
export const EnableCameraSceneName = "EnableCameraScene";
|
export const EnableCameraSceneName = "EnableCameraScene";
|
||||||
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import Image = Phaser.GameObjects.Image;
|
|
||||||
import Rectangle = Phaser.GameObjects.Rectangle;
|
|
||||||
import { addLoader } from "../Components/Loader";
|
import { addLoader } from "../Components/Loader";
|
||||||
import { gameManager } from "../Game/GameManager";
|
import { gameManager } from "../Game/GameManager";
|
||||||
import { ResizableScene } from "./ResizableScene";
|
import { ResizableScene } from "./ResizableScene";
|
||||||
|
@ -251,10 +251,18 @@ export const mediaStreamConstraintsStore = derived(
|
|||||||
let currentAudioConstraint: boolean | MediaTrackConstraints = $audioConstraintStore;
|
let currentAudioConstraint: boolean | MediaTrackConstraints = $audioConstraintStore;
|
||||||
|
|
||||||
if ($enableCameraSceneVisibilityStore) {
|
if ($enableCameraSceneVisibilityStore) {
|
||||||
|
console.log("currentVideoConstraint", currentVideoConstraint);
|
||||||
|
console.log("currentAudioConstraint", currentAudioConstraint);
|
||||||
set({
|
set({
|
||||||
video: currentVideoConstraint,
|
video: currentVideoConstraint,
|
||||||
audio: currentAudioConstraint,
|
audio: currentAudioConstraint,
|
||||||
});
|
});
|
||||||
|
localUserStore.setCameraSetup(
|
||||||
|
JSON.stringify({
|
||||||
|
video: currentVideoConstraint,
|
||||||
|
audio: currentAudioConstraint,
|
||||||
|
})
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user