Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop
This commit is contained in:
@@ -54,7 +54,7 @@ export class Loader {
|
||||
.catch((e) => console.warn("Could not load logo: ", logoResource, e));
|
||||
|
||||
let poweredByLogoPromise: CancelablePromise<Texture> | undefined;
|
||||
if (gameManager.currentStartedRoom.loadingLogo) {
|
||||
if (gameManager.currentStartedRoom.loadingLogo && gameManager.currentStartedRoom.showPoweredBy !== false) {
|
||||
poweredByLogoPromise = this.superLoad.image(
|
||||
"poweredByLogo",
|
||||
"static/images/Powered_By_WorkAdventure_Small.png"
|
||||
|
||||
@@ -4,5 +4,6 @@ export const DEPTH_TILE_INDEX = 0;
|
||||
//Note: Player characters use their y coordinate as their depth to simulate a perspective.
|
||||
//See the Character class.
|
||||
export const DEPTH_OVERLAY_INDEX = 10000;
|
||||
export const DEPTH_BUBBLE_CHAT_SPRITE = 99999;
|
||||
export const DEPTH_INGAME_TEXT_INDEX = 100000;
|
||||
export const DEPTH_UI_INDEX = 1000000;
|
||||
|
||||
@@ -76,6 +76,7 @@ import { contactPageStore } from "../../Stores/MenuStore";
|
||||
import type { WasCameraUpdatedEvent } from "../../Api/Events/WasCameraUpdatedEvent";
|
||||
import { audioManagerFileStore } from "../../Stores/AudioManagerStore";
|
||||
import { currentPlayerGroupLockStateStore } from "../../Stores/CurrentPlayerGroupStore";
|
||||
import { errorScreenStore } from "../../Stores/ErrorScreenStore";
|
||||
|
||||
import EVENT_TYPE = Phaser.Scenes.Events;
|
||||
import Texture = Phaser.Textures.Texture;
|
||||
@@ -90,8 +91,8 @@ import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR;
|
||||
import { MapStore } from "../../Stores/Utils/MapStore";
|
||||
import { followUsersColorStore } from "../../Stores/FollowStore";
|
||||
import { GameSceneUserInputHandler } from "../UserInput/GameSceneUserInputHandler";
|
||||
import { locale } from "../../i18n/i18n-svelte";
|
||||
import { i18nJson } from "../../i18n/locales";
|
||||
import LL, { locale } from "../../i18n/i18n-svelte";
|
||||
import { availabilityStatusStore, localVolumeStore } from "../../Stores/MediaStore";
|
||||
import { StringUtils } from "../../Utils/StringUtils";
|
||||
import { startLayerNamesStore } from "../../Stores/StartLayerNamesStore";
|
||||
@@ -101,7 +102,9 @@ import type { CoWebsite } from "../../WebRtc/CoWebsite/CoWesbite";
|
||||
import CancelablePromise from "cancelable-promise";
|
||||
import { Deferred } from "ts-deferred";
|
||||
import { SuperLoaderPlugin } from "../Services/SuperLoaderPlugin";
|
||||
import { PlayerDetailsUpdatedMessage } from "../../Messages/ts-proto-generated/protos/messages";
|
||||
import { DEPTH_BUBBLE_CHAT_SPRITE } from "./DepthIndexes";
|
||||
import { ErrorScreenMessage, PlayerDetailsUpdatedMessage } from "../../Messages/ts-proto-generated/protos/messages";
|
||||
import { uiWebsiteManager } from "./UI/UIWebsiteManager";
|
||||
export interface GameSceneInitInterface {
|
||||
initPosition: PointInterface | null;
|
||||
reconnecting: boolean;
|
||||
@@ -613,14 +616,30 @@ export class GameScene extends DirtyScene {
|
||||
if (this.isReconnecting) {
|
||||
setTimeout(() => {
|
||||
this.scene.sleep();
|
||||
this.scene.launch(ReconnectingSceneName);
|
||||
errorScreenStore.setError(
|
||||
ErrorScreenMessage.fromPartial({
|
||||
type: "reconnecting",
|
||||
code: "CONNECTION_LOST",
|
||||
title: get(LL).warning.connectionLostTitle(),
|
||||
details: get(LL).warning.connectionLostSubtitle(),
|
||||
})
|
||||
);
|
||||
//this.scene.launch(ReconnectingSceneName);
|
||||
}, 0);
|
||||
} else if (this.connection === undefined) {
|
||||
// Let's wait 1 second before printing the "connecting" screen to avoid blinking
|
||||
setTimeout(() => {
|
||||
if (this.connection === undefined) {
|
||||
this.scene.sleep();
|
||||
this.scene.launch(ReconnectingSceneName);
|
||||
errorScreenStore.setError(
|
||||
ErrorScreenMessage.fromPartial({
|
||||
type: "reconnecting",
|
||||
code: "CONNECTION_LOST",
|
||||
title: get(LL).warning.connectionLostTitle(),
|
||||
details: get(LL).warning.connectionLostSubtitle(),
|
||||
})
|
||||
);
|
||||
//this.scene.launch(ReconnectingSceneName);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
@@ -904,7 +923,9 @@ export class GameScene extends DirtyScene {
|
||||
// Analyze tags to find if we are admin. If yes, show console.
|
||||
|
||||
if (this.scene.isSleeping()) {
|
||||
this.scene.stop(ReconnectingSceneName);
|
||||
const error = get(errorScreenStore);
|
||||
if (error && error?.type === "reconnecting") errorScreenStore.delete();
|
||||
//this.scene.stop(ReconnectingSceneName);
|
||||
}
|
||||
|
||||
//init user position and play trigger to check layers properties
|
||||
@@ -1111,6 +1132,24 @@ export class GameScene extends DirtyScene {
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.enablePlayerControlStream.subscribe(() => {
|
||||
this.userInputManager.restoreControls();
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.disablePlayerProximityMeetingStream.subscribe(() => {
|
||||
this.disableMediaBehaviors();
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.enablePlayerProximityMeetingStream.subscribe(() => {
|
||||
this.enableMediaBehaviors();
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.cameraSetStream.subscribe((cameraSetEvent) => {
|
||||
const duration = cameraSetEvent.smooth ? 1000 : 0;
|
||||
@@ -1198,11 +1237,6 @@ export class GameScene extends DirtyScene {
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.enablePlayerControlStream.subscribe(() => {
|
||||
this.userInputManager.restoreControls();
|
||||
})
|
||||
);
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.loadPageStream.subscribe((url: string) => {
|
||||
this.loadNextGameFromExitUrl(url)
|
||||
@@ -1225,7 +1259,7 @@ export class GameScene extends DirtyScene {
|
||||
this.CurrentPlayer.y,
|
||||
"circleSprite-white"
|
||||
);
|
||||
scriptedBubbleSprite.setDisplayOrigin(48, 48);
|
||||
scriptedBubbleSprite.setDisplayOrigin(48, 48).setDepth(DEPTH_BUBBLE_CHAT_SPRITE);
|
||||
this.add.existing(scriptedBubbleSprite);
|
||||
})
|
||||
);
|
||||
@@ -1313,6 +1347,17 @@ export class GameScene extends DirtyScene {
|
||||
data.propertyValue = this.gameMap.getLayerProperty(data.layerName, data.propertyName);
|
||||
return data;
|
||||
});
|
||||
iframeListener.registerAnswerer("openUIWebsite", (websiteConfig) => {
|
||||
return uiWebsiteManager.open(websiteConfig);
|
||||
});
|
||||
|
||||
iframeListener.registerAnswerer("getUIWebsites", () => {
|
||||
return uiWebsiteManager.getAll();
|
||||
});
|
||||
|
||||
iframeListener.registerAnswerer("closeUIWebsite", (websiteId) => {
|
||||
return uiWebsiteManager.close(websiteId);
|
||||
});
|
||||
|
||||
iframeListener.registerAnswerer("getMapData", () => {
|
||||
return {
|
||||
@@ -1610,6 +1655,9 @@ export class GameScene extends DirtyScene {
|
||||
iframeListener.unregisterAnswerer("getCoWebsites");
|
||||
iframeListener.unregisterAnswerer("setPlayerOutline");
|
||||
iframeListener.unregisterAnswerer("setVariable");
|
||||
iframeListener.unregisterAnswerer("openUIWebsite");
|
||||
iframeListener.unregisterAnswerer("getUIWebsites");
|
||||
iframeListener.unregisterAnswerer("closeUIWebsite");
|
||||
this.sharedVariablesManager?.close();
|
||||
this.embeddedWebsiteManager?.close();
|
||||
|
||||
@@ -2079,7 +2127,7 @@ export class GameScene extends DirtyScene {
|
||||
? "circleSprite-red"
|
||||
: "circleSprite-white"
|
||||
);
|
||||
sprite.setDisplayOrigin(48, 48);
|
||||
sprite.setDisplayOrigin(48, 48).setDepth(DEPTH_BUBBLE_CHAT_SPRITE);
|
||||
this.add.existing(sprite);
|
||||
this.groups.set(groupPositionMessage.groupId, sprite);
|
||||
if (this.currentPlayerGroupId === groupPositionMessage.groupId) {
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
import { get } from "svelte/store";
|
||||
import { CreateUIWebsiteEvent, ModifyUIWebsiteEvent, UIWebsite } from "../../../Api/Events/ui/UIWebsite";
|
||||
import { iframeListener } from "../../../Api/IframeListener";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { uiWebsitesStore } from "../../../Stores/UIWebsiteStore";
|
||||
|
||||
class UIWebsiteManager {
|
||||
constructor() {
|
||||
iframeListener.modifyUIWebsiteStream.subscribe((websiteEvent: ModifyUIWebsiteEvent) => {
|
||||
const website = get(uiWebsitesStore).find((currentWebsite) => currentWebsite.id === websiteEvent.id);
|
||||
if (!website) {
|
||||
throw new Error(`Could not find ui website with the id "${websiteEvent.id}" in your map`);
|
||||
}
|
||||
|
||||
if (websiteEvent.url) {
|
||||
website.url = websiteEvent.url;
|
||||
}
|
||||
|
||||
if (websiteEvent.visible !== undefined) {
|
||||
website.visible = websiteEvent.visible;
|
||||
}
|
||||
|
||||
if (websiteEvent.position) {
|
||||
if (websiteEvent.position.horizontal) {
|
||||
website.position.horizontal = websiteEvent.position.horizontal;
|
||||
}
|
||||
|
||||
if (websiteEvent.position.vertical) {
|
||||
website.position.vertical = websiteEvent.position.vertical;
|
||||
}
|
||||
}
|
||||
|
||||
if (websiteEvent.size) {
|
||||
if (websiteEvent.size.height) {
|
||||
website.size.height = websiteEvent.size.height;
|
||||
}
|
||||
|
||||
if (websiteEvent.size.width) {
|
||||
website.size.width = websiteEvent.size.width;
|
||||
}
|
||||
}
|
||||
|
||||
if (websiteEvent.margin) {
|
||||
website.margin = {};
|
||||
|
||||
if (websiteEvent.margin.top !== undefined) {
|
||||
website.margin.top = websiteEvent.margin.top;
|
||||
}
|
||||
|
||||
if (websiteEvent.margin.bottom !== undefined) {
|
||||
website.margin.bottom = websiteEvent.margin.bottom;
|
||||
}
|
||||
|
||||
if (websiteEvent.margin.left !== undefined) {
|
||||
website.margin.left = websiteEvent.margin.left;
|
||||
}
|
||||
|
||||
if (websiteEvent.margin.right !== undefined) {
|
||||
website.margin.right = websiteEvent.margin.right;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public open(websiteConfig: CreateUIWebsiteEvent): UIWebsite {
|
||||
const newWebsite: UIWebsite = {
|
||||
...websiteConfig,
|
||||
id: uuidv4(),
|
||||
visible: websiteConfig.visible ?? true,
|
||||
allowPolicy: websiteConfig.allowPolicy ?? "",
|
||||
allowApi: websiteConfig.allowApi ?? false,
|
||||
};
|
||||
|
||||
uiWebsitesStore.add(newWebsite);
|
||||
|
||||
return newWebsite;
|
||||
}
|
||||
|
||||
public getAll(): UIWebsite[] {
|
||||
return get(uiWebsitesStore);
|
||||
}
|
||||
|
||||
public close(websiteId: string) {
|
||||
const uiWebsite = get(uiWebsitesStore).find((currentWebsite) => currentWebsite.id === websiteId);
|
||||
|
||||
if (!uiWebsite) {
|
||||
return;
|
||||
}
|
||||
|
||||
uiWebsitesStore.remove(uiWebsite);
|
||||
}
|
||||
}
|
||||
|
||||
export const uiWebsiteManager = new UIWebsiteManager();
|
||||
@@ -94,6 +94,7 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
}
|
||||
|
||||
public create(): void {
|
||||
this.selectedLayers = [0, 0, 0, 0, 0, 0];
|
||||
this.tryLoadLastUsedWokaLayers();
|
||||
waScaleManager.zoomModifier = 1;
|
||||
this.createSlotBackgroundTextures();
|
||||
@@ -154,11 +155,10 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
try {
|
||||
const savedWokaLayers = gameManager.getCharacterLayers();
|
||||
if (savedWokaLayers && savedWokaLayers.length !== 0) {
|
||||
this.selectedLayers = [];
|
||||
for (let i = 0; i < savedWokaLayers.length; i += 1) {
|
||||
this.selectedLayers.push(
|
||||
this.layers[i].findIndex((item) => item.id === gameManager.getCharacterLayers()[i])
|
||||
);
|
||||
const index = this.layers[i].findIndex((item) => item.id === gameManager.getCharacterLayers()[i]);
|
||||
// set first item as default if not found
|
||||
this.selectedLayers[i] = index !== -1 ? index : 0;
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user