diff --git a/front/src/Phaser/Companion/Companion.ts b/front/src/Phaser/Companion/Companion.ts index ab3225f5..f7f010ac 100644 --- a/front/src/Phaser/Companion/Companion.ts +++ b/front/src/Phaser/Companion/Companion.ts @@ -1,6 +1,7 @@ import Sprite = Phaser.GameObjects.Sprite; import Container = Phaser.GameObjects.Container; import { PlayerAnimationDirections, PlayerAnimationTypes } from "../Player/Animation"; +import { TexturesHelper } from "../Helpers/TexturesHelper"; export interface CompanionStatus { x: number; @@ -125,33 +126,18 @@ export class Companion extends Container { } public async getSnapshot(): Promise { - const rt = this.scene.make.renderTexture({}, false); - if (rt.renderer instanceof Phaser.Renderer.Canvas.CanvasRenderer) { - rt.destroy(); + const sprites = Array.from(this.sprites.values()).map((sprite) => { + return { sprite, frame: 1 }; + }); + return TexturesHelper.getSnapshot(this.scene, ...sprites).catch((reason) => { + console.warn(reason); for (const sprite of this.sprites.values()) { - // we can be sure that either predefined woka or body texture is at this point loaded + // it can be either cat or dog prefix if (sprite.texture.key.includes("cat") || sprite.texture.key.includes("dog")) { return this.scene.textures.getBase64(sprite.texture.key); } } - } - for (const sprite of this.sprites.values()) { - sprite.setFrame(1); - rt.draw(sprite, sprite.displayWidth * 0.5, sprite.displayHeight * 0.5); - } - return new Promise((resolve, reject) => { - try { - rt.snapshot( - (url) => { - resolve((url as HTMLImageElement).src); - rt.destroy(); - }, - "image/png", - 1 - ); - } catch (error) { - reject(error); - } + return "cat1"; }); } diff --git a/front/src/Phaser/Entity/Character.ts b/front/src/Phaser/Entity/Character.ts index a5aaae08..6a8e0752 100644 --- a/front/src/Phaser/Entity/Character.ts +++ b/front/src/Phaser/Entity/Character.ts @@ -11,6 +11,7 @@ import { DEPTH_INGAME_TEXT_INDEX } from "../Game/DepthIndexes"; import type OutlinePipelinePlugin from "phaser3-rex-plugins/plugins/outlinepipeline-plugin.js"; import { isSilentStore } from "../../Stores/MediaStore"; import { lazyLoadPlayerCharacterTextures, loadAllDefaultModels } from "./PlayerTexturesLoadingManager"; +import { TexturesHelper } from "../Helpers/TexturesHelper"; const playerNameY = -25; @@ -118,33 +119,18 @@ export abstract class Character extends Container { } public async getSnapshot(): Promise { - const rt = this.scene.make.renderTexture({}, false); - if (rt.renderer instanceof Phaser.Renderer.Canvas.CanvasRenderer) { - rt.destroy(); + const sprites = Array.from(this.sprites.values()).map((sprite) => { + return { sprite, frame: 1 }; + }); + return TexturesHelper.getSnapshot(this.scene, ...sprites).catch((reason) => { + console.warn(reason); for (const sprite of this.sprites.values()) { // we can be sure that either predefined woka or body texture is at this point loaded if (sprite.texture.key.includes("color") || sprite.texture.key.includes("male")) { return this.scene.textures.getBase64(sprite.texture.key); } } - } - for (const sprite of this.sprites.values()) { - sprite.setFrame(1); - rt.draw(sprite, sprite.displayWidth * 0.5, sprite.displayHeight * 0.5); - } - return new Promise((resolve, reject) => { - try { - rt.snapshot( - (url) => { - resolve((url as HTMLImageElement).src); - rt.destroy(); - }, - "image/png", - 1 - ); - } catch (error) { - reject(error); - } + return "male1"; }); } diff --git a/front/src/Phaser/Helpers/TexturesHelper.ts b/front/src/Phaser/Helpers/TexturesHelper.ts new file mode 100644 index 00000000..348e957a --- /dev/null +++ b/front/src/Phaser/Helpers/TexturesHelper.ts @@ -0,0 +1,34 @@ +export class TexturesHelper { + public static async getSnapshot( + scene: Phaser.Scene, + ...sprites: { sprite: Phaser.GameObjects.Sprite; frame?: string | number }[] + ): Promise { + const rt = scene.make.renderTexture({}, false); + try { + for (const { sprite, frame } of sprites) { + if (frame) { + sprite.setFrame(frame); + } + rt.draw(sprite, sprite.displayWidth * 0.5, sprite.displayHeight * 0.5); + } + return new Promise((resolve, reject) => { + try { + rt.snapshot( + (url) => { + resolve((url as HTMLImageElement).src); + rt.destroy(); + }, + "image/png", + 1 + ); + } catch (error) { + rt.destroy(); + reject(error); + } + }); + } catch (error) { + rt.destroy(); + throw new Error("Could not get the snapshot"); + } + } +}