Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop
This commit is contained in:
@@ -61,9 +61,8 @@ export class CustomWokaPreviewer extends Phaser.GameObjects.Container {
|
||||
this.frame = this.scene.add.graphics();
|
||||
this.turnIcon = this.scene.add
|
||||
.image(this.background.displayWidth * 0.35, this.background.displayHeight * 0.35, "iconTurn")
|
||||
.setScale(0.25)
|
||||
.setTintFill(0xffffff)
|
||||
.setAlpha(0.5);
|
||||
.setScale(0.2)
|
||||
.setAlpha(0.75);
|
||||
|
||||
this.drawFrame();
|
||||
this.setSize(this.SIZE, this.SIZE);
|
||||
@@ -130,11 +129,11 @@ export class CustomWokaPreviewer extends Phaser.GameObjects.Container {
|
||||
this.changeAnimation(direction, moving);
|
||||
|
||||
this.turnIconTween?.stop();
|
||||
this.turnIcon.setScale(0.25);
|
||||
this.turnIcon.setScale(0.2);
|
||||
this.turnIconTween = this.scene.tweens.add({
|
||||
targets: [this.turnIcon],
|
||||
duration: 100,
|
||||
scale: 0.2,
|
||||
scale: 0.15,
|
||||
yoyo: true,
|
||||
ease: Easing.SineEaseIn,
|
||||
});
|
||||
|
||||
@@ -6,6 +6,7 @@ export interface IconButtonConfig {
|
||||
hover: IconButtonAppearanceConfig;
|
||||
pressed: IconButtonAppearanceConfig;
|
||||
selected: IconButtonAppearanceConfig;
|
||||
iconScale?: number;
|
||||
}
|
||||
|
||||
export interface IconButtonAppearanceConfig {
|
||||
@@ -34,7 +35,7 @@ export class IconButton extends Phaser.GameObjects.Container {
|
||||
this.config = config;
|
||||
|
||||
this.background = this.scene.add.graphics();
|
||||
this.icon = this.scene.add.image(0, 0, this.config.iconTextureKey);
|
||||
this.icon = this.scene.add.image(0, 0, this.config.iconTextureKey).setScale(config.iconScale ?? 1);
|
||||
this.drawBackground(this.config.idle);
|
||||
|
||||
this.add([this.background, this.icon]);
|
||||
|
||||
@@ -4,7 +4,7 @@ import { Character } from "../Entity/Character";
|
||||
import type { GameScene } from "../Game/GameScene";
|
||||
import type { PointInterface } from "../../Connexion/ConnexionModels";
|
||||
import type { PlayerAnimationDirections } from "../Player/Animation";
|
||||
import type { Unsubscriber } from "svelte/store";
|
||||
import { get, Unsubscriber } from "svelte/store";
|
||||
import type { ActivatableInterface } from "../Game/ActivatableInterface";
|
||||
import type CancelablePromise from "cancelable-promise";
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
@@ -113,7 +113,7 @@ export class RemotePlayer extends Character implements ActivatableInterface {
|
||||
const actions: ActionsMenuAction[] = [];
|
||||
if (this.visitCardUrl) {
|
||||
actions.push({
|
||||
actionName: LL.woka.menu.businessCard(),
|
||||
actionName: get(LL).woka.menu.businessCard(),
|
||||
protected: true,
|
||||
priority: 1,
|
||||
callback: () => {
|
||||
@@ -125,8 +125,8 @@ export class RemotePlayer extends Character implements ActivatableInterface {
|
||||
|
||||
actions.push({
|
||||
actionName: blackListManager.isBlackListed(this.userUuid)
|
||||
? LL.report.block.unblock()
|
||||
: LL.report.block.block(),
|
||||
? get(LL).report.block.unblock()
|
||||
: get(LL).report.block.block(),
|
||||
protected: true,
|
||||
priority: -1,
|
||||
style: "is-error",
|
||||
|
||||
@@ -76,6 +76,7 @@ export class ActivatablesManager {
|
||||
const currentPlayerPos = this.currentPlayer.getDirectionalActivationPosition(
|
||||
this.directionalActivationPositionShift
|
||||
);
|
||||
this.activatableObjectsDistances.clear();
|
||||
for (const object of objects) {
|
||||
const distance = MathUtils.distanceBetween(currentPlayerPos, object.getPosition());
|
||||
this.activatableObjectsDistances.set(object, distance);
|
||||
|
||||
@@ -1135,6 +1135,13 @@ export class GameScene extends DirtyScene {
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.stopSoundStream.subscribe((stopSoundEvent) => {
|
||||
const url = new URL(stopSoundEvent.url, this.MapUrlFile);
|
||||
soundManager.stopSound(this.sound, url.toString());
|
||||
})
|
||||
);
|
||||
|
||||
this.iframeSubscriptionList.push(
|
||||
iframeListener.addActionsMenuKeyToRemotePlayerStream.subscribe((data) => {
|
||||
this.MapPlayersByKey.get(data.id)?.registerActionsMenuAction({
|
||||
|
||||
@@ -94,6 +94,7 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
}
|
||||
|
||||
public create(): void {
|
||||
this.tryLoadLastUsedWokaLayers();
|
||||
waScaleManager.zoomModifier = 1;
|
||||
this.createSlotBackgroundTextures();
|
||||
this.initializeCustomWokaPreviewer();
|
||||
@@ -149,12 +150,35 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
this.scene.run(SelectCharacterSceneName);
|
||||
}
|
||||
|
||||
private tryLoadLastUsedWokaLayers(): void {
|
||||
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])
|
||||
);
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
console.warn("Cannot load previous WOKA");
|
||||
}
|
||||
}
|
||||
|
||||
private createSlotBackgroundTextures(): void {
|
||||
for (let i = 0; i < 4; i += 1) {
|
||||
if (this.textures.getTextureKeys().includes(`floorTexture${i}`)) {
|
||||
continue;
|
||||
}
|
||||
TexturesHelper.createFloorRectangleTexture(this, `floorTexture${i}`, 50, 50, "floorTiles", i);
|
||||
TexturesHelper.createFloorRectangleTexture(
|
||||
this,
|
||||
`floorTexture${i}`,
|
||||
WokaBodyPartSlot.SIZE,
|
||||
WokaBodyPartSlot.SIZE,
|
||||
"floorTiles",
|
||||
i
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,15 +237,16 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
),
|
||||
[CustomWokaBodyPart.Body]: new IconButton(this, 0, 0, this.getDefaultIconButtonConfig("iconBody")),
|
||||
[CustomWokaBodyPart.Clothes]: new IconButton(this, 0, 0, this.getDefaultIconButtonConfig("iconClothes")),
|
||||
[CustomWokaBodyPart.Eyes]: new IconButton(this, 0, 0, this.getDefaultIconButtonConfig("iconEyes")),
|
||||
[CustomWokaBodyPart.Eyes]: new IconButton(this, 0, 0, this.getDefaultIconButtonConfig("iconEyes", 0.7)),
|
||||
[CustomWokaBodyPart.Hair]: new IconButton(this, 0, 0, this.getDefaultIconButtonConfig("iconHair")),
|
||||
[CustomWokaBodyPart.Hat]: new IconButton(this, 0, 0, this.getDefaultIconButtonConfig("iconHat")),
|
||||
};
|
||||
}
|
||||
|
||||
private getDefaultIconButtonConfig(iconTextureKey: string): IconButtonConfig {
|
||||
private getDefaultIconButtonConfig(iconTextureKey: string, iconScale?: number): IconButtonConfig {
|
||||
return {
|
||||
iconTextureKey,
|
||||
iconScale,
|
||||
width: 25,
|
||||
height: 25,
|
||||
idle: {
|
||||
@@ -327,13 +352,14 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
}
|
||||
|
||||
private handleCustomWokaPreviewerOnResize(): void {
|
||||
const ratio = innerHeight / innerWidth;
|
||||
this.customWokaPreviewer.x = this.cameras.main.worldView.x + this.cameras.main.width / 2;
|
||||
this.customWokaPreviewer.y = this.customWokaPreviewer.displayHeight * 0.5 + 10;
|
||||
this.customWokaPreviewer.y = this.customWokaPreviewer.displayHeight * 0.5 + (ratio > 1.6 ? 40 : 10);
|
||||
}
|
||||
|
||||
private handleBodyPartButtonsOnResize(): void {
|
||||
const ratio = innerHeight / innerWidth;
|
||||
const slotDimension = 50;
|
||||
const slotDimension = WokaBodyPartSlot.SIZE;
|
||||
|
||||
for (const part in this.bodyPartsButtons) {
|
||||
this.bodyPartsButtons[part as CustomWokaBodyPart].setDisplaySize(slotDimension, slotDimension);
|
||||
@@ -420,7 +446,7 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
|
||||
private handleRandomizeButtonOnResize(): void {
|
||||
const x =
|
||||
this.customWokaPreviewer.x +
|
||||
this.customWokaPreviewer.x -
|
||||
(this.customWokaPreviewer.displayWidth - this.randomizeButton.displayWidth) * 0.5;
|
||||
const y =
|
||||
this.customWokaPreviewer.y +
|
||||
@@ -431,7 +457,7 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
|
||||
private handleFinishButtonOnResize(): void {
|
||||
const x =
|
||||
this.customWokaPreviewer.x -
|
||||
this.customWokaPreviewer.x +
|
||||
(this.customWokaPreviewer.displayWidth - this.randomizeButton.displayWidth) * 0.5;
|
||||
const y =
|
||||
this.customWokaPreviewer.y +
|
||||
|
||||
@@ -6,7 +6,6 @@ import { ReconnectingTextures } from "../Reconnecting/ReconnectingScene";
|
||||
import { localeDetector } from "../../i18n/locales";
|
||||
import { errorScreenStore } from "../../Stores/ErrorScreenStore";
|
||||
import { isErrorApiData } from "../../Messages/JsonMessages/ErrorApiData";
|
||||
import { connectionManager } from "../../Connexion/ConnectionManager";
|
||||
|
||||
export const EntrySceneName = "EntryScene";
|
||||
|
||||
@@ -49,9 +48,7 @@ export class EntryScene extends Scene {
|
||||
.catch((err) => {
|
||||
const errorType = isErrorApiData.safeParse(err?.response?.data);
|
||||
if (errorType.success) {
|
||||
if (errorType.data.type === "unauthorized") {
|
||||
void connectionManager.logout();
|
||||
} else if (errorType.data.type === "redirect") {
|
||||
if (errorType.data.type === "redirect") {
|
||||
window.location.assign(errorType.data.urlToRedirect);
|
||||
} else errorScreenStore.setError(err?.response?.data);
|
||||
} else {
|
||||
|
||||
@@ -18,6 +18,7 @@ import { DraggableGrid } from "@home-based-studio/phaser3-utils";
|
||||
import { WokaSlot } from "../Components/SelectWoka/WokaSlot";
|
||||
import { DraggableGridEvent } from "@home-based-studio/phaser3-utils/lib/utils/gui/containers/grids/DraggableGrid";
|
||||
import { wokaList } from "../../Messages/JsonMessages/PlayerTextures";
|
||||
import { myCameraVisibilityStore } from "../../Stores/MyCameraStoreVisibility";
|
||||
|
||||
//todo: put this constants in a dedicated file
|
||||
export const SelectCharacterSceneName = "SelectCharacterScene";
|
||||
@@ -133,6 +134,7 @@ export class SelectCharacterScene extends AbstractCharacterScene {
|
||||
return;
|
||||
}
|
||||
this.selectedWoka = null;
|
||||
myCameraVisibilityStore.set(false);
|
||||
this.scene.sleep(SelectCharacterSceneName);
|
||||
this.scene.run(CustomizeSceneName);
|
||||
selectCharacterSceneVisibleStore.set(false);
|
||||
|
||||
Reference in New Issue
Block a user