moved gettingSnapshot logic into TexturesHelper
This commit is contained in:
parent
8eaacdf2e5
commit
bbe539b785
3 changed files with 49 additions and 43 deletions
|
@ -1,6 +1,7 @@
|
||||||
import Sprite = Phaser.GameObjects.Sprite;
|
import Sprite = Phaser.GameObjects.Sprite;
|
||||||
import Container = Phaser.GameObjects.Container;
|
import Container = Phaser.GameObjects.Container;
|
||||||
import { PlayerAnimationDirections, PlayerAnimationTypes } from "../Player/Animation";
|
import { PlayerAnimationDirections, PlayerAnimationTypes } from "../Player/Animation";
|
||||||
|
import { TexturesHelper } from "../Helpers/TexturesHelper";
|
||||||
|
|
||||||
export interface CompanionStatus {
|
export interface CompanionStatus {
|
||||||
x: number;
|
x: number;
|
||||||
|
@ -125,33 +126,18 @@ export class Companion extends Container {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getSnapshot(): Promise<string> {
|
public async getSnapshot(): Promise<string> {
|
||||||
const rt = this.scene.make.renderTexture({}, false);
|
const sprites = Array.from(this.sprites.values()).map((sprite) => {
|
||||||
if (rt.renderer instanceof Phaser.Renderer.Canvas.CanvasRenderer) {
|
return { sprite, frame: 1 };
|
||||||
rt.destroy();
|
});
|
||||||
|
return TexturesHelper.getSnapshot(this.scene, ...sprites).catch((reason) => {
|
||||||
|
console.warn(reason);
|
||||||
for (const sprite of this.sprites.values()) {
|
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")) {
|
if (sprite.texture.key.includes("cat") || sprite.texture.key.includes("dog")) {
|
||||||
return this.scene.textures.getBase64(sprite.texture.key);
|
return this.scene.textures.getBase64(sprite.texture.key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return "cat1";
|
||||||
for (const sprite of this.sprites.values()) {
|
|
||||||
sprite.setFrame(1);
|
|
||||||
rt.draw(sprite, sprite.displayWidth * 0.5, sprite.displayHeight * 0.5);
|
|
||||||
}
|
|
||||||
return new Promise<string>((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
rt.snapshot(
|
|
||||||
(url) => {
|
|
||||||
resolve((url as HTMLImageElement).src);
|
|
||||||
rt.destroy();
|
|
||||||
},
|
|
||||||
"image/png",
|
|
||||||
1
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import { DEPTH_INGAME_TEXT_INDEX } from "../Game/DepthIndexes";
|
||||||
import type OutlinePipelinePlugin from "phaser3-rex-plugins/plugins/outlinepipeline-plugin.js";
|
import type OutlinePipelinePlugin from "phaser3-rex-plugins/plugins/outlinepipeline-plugin.js";
|
||||||
import { isSilentStore } from "../../Stores/MediaStore";
|
import { isSilentStore } from "../../Stores/MediaStore";
|
||||||
import { lazyLoadPlayerCharacterTextures, loadAllDefaultModels } from "./PlayerTexturesLoadingManager";
|
import { lazyLoadPlayerCharacterTextures, loadAllDefaultModels } from "./PlayerTexturesLoadingManager";
|
||||||
|
import { TexturesHelper } from "../Helpers/TexturesHelper";
|
||||||
|
|
||||||
const playerNameY = -25;
|
const playerNameY = -25;
|
||||||
|
|
||||||
|
@ -118,33 +119,18 @@ export abstract class Character extends Container {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getSnapshot(): Promise<string> {
|
public async getSnapshot(): Promise<string> {
|
||||||
const rt = this.scene.make.renderTexture({}, false);
|
const sprites = Array.from(this.sprites.values()).map((sprite) => {
|
||||||
if (rt.renderer instanceof Phaser.Renderer.Canvas.CanvasRenderer) {
|
return { sprite, frame: 1 };
|
||||||
rt.destroy();
|
});
|
||||||
|
return TexturesHelper.getSnapshot(this.scene, ...sprites).catch((reason) => {
|
||||||
|
console.warn(reason);
|
||||||
for (const sprite of this.sprites.values()) {
|
for (const sprite of this.sprites.values()) {
|
||||||
// we can be sure that either predefined woka or body texture is at this point loaded
|
// 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")) {
|
if (sprite.texture.key.includes("color") || sprite.texture.key.includes("male")) {
|
||||||
return this.scene.textures.getBase64(sprite.texture.key);
|
return this.scene.textures.getBase64(sprite.texture.key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return "male1";
|
||||||
for (const sprite of this.sprites.values()) {
|
|
||||||
sprite.setFrame(1);
|
|
||||||
rt.draw(sprite, sprite.displayWidth * 0.5, sprite.displayHeight * 0.5);
|
|
||||||
}
|
|
||||||
return new Promise<string>((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
rt.snapshot(
|
|
||||||
(url) => {
|
|
||||||
resolve((url as HTMLImageElement).src);
|
|
||||||
rt.destroy();
|
|
||||||
},
|
|
||||||
"image/png",
|
|
||||||
1
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
34
front/src/Phaser/Helpers/TexturesHelper.ts
Normal file
34
front/src/Phaser/Helpers/TexturesHelper.ts
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
export class TexturesHelper {
|
||||||
|
public static async getSnapshot(
|
||||||
|
scene: Phaser.Scene,
|
||||||
|
...sprites: { sprite: Phaser.GameObjects.Sprite; frame?: string | number }[]
|
||||||
|
): Promise<string> {
|
||||||
|
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<string>((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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue