From ef7dfe9bb8c39c278d1625120431fad6515cb4b2 Mon Sep 17 00:00:00 2001 From: Bill Date: Tue, 11 Jul 2023 21:55:42 -0400 Subject: [PATCH] Make some TextureUtilities async --- src/api/asset/GraphicAsset.ts | 7 ---- src/api/nitro/avatar/IAvatarImage.ts | 4 +- .../nitro/camera/IRoomCameraWidgetManager.ts | 2 +- src/api/nitro/room/IImageResult.ts | 2 +- src/api/nitro/room/IRoomEngine.ts | 2 +- src/nitro/avatar/AvatarImage.ts | 14 +++---- src/nitro/camera/RoomCameraWidgetManager.ts | 4 +- .../camera/RenderRoomMessageComposer.ts | 4 +- src/nitro/room/ImageResult.ts | 4 +- src/nitro/room/RoomEngine.ts | 42 +++++++++++-------- src/pixi-proxy/TextureUtils.ts | 4 +- 11 files changed, 42 insertions(+), 47 deletions(-) diff --git a/src/api/asset/GraphicAsset.ts b/src/api/asset/GraphicAsset.ts index b99bb71c..7b717978 100644 --- a/src/api/asset/GraphicAsset.ts +++ b/src/api/asset/GraphicAsset.ts @@ -1,7 +1,5 @@ import { Resource, Texture } from '@pixi/core'; import { Rectangle } from '@pixi/math'; -import { Sprite } from '@pixi/sprite'; -import { TextureUtils } from '../../pixi-proxy'; import { IGraphicAsset } from './IGraphicAsset'; export class GraphicAsset implements IGraphicAsset @@ -66,11 +64,6 @@ export class GraphicAsset implements IGraphicAsset this._initialized = true; } - public getImageUrl(): string - { - return TextureUtils.generateImageUrl(new Sprite(this._texture)); - } - public get name(): string { return this._name; diff --git a/src/api/nitro/avatar/IAvatarImage.ts b/src/api/nitro/avatar/IAvatarImage.ts index 559a7d3a..9005b996 100644 --- a/src/api/nitro/avatar/IAvatarImage.ts +++ b/src/api/nitro/avatar/IAvatarImage.ts @@ -2,8 +2,8 @@ import { RenderTexture } from '@pixi/core'; import { Sprite } from '@pixi/sprite'; import { IGraphicAsset } from '../../asset'; import { IDisposable } from '../../common'; -import { IAnimationLayerData, IAvatarDataContainer, ISpriteDataContainer } from './animation'; import { IAvatarFigureContainer } from './IAvatarFigureContainer'; +import { IAnimationLayerData, IAvatarDataContainer, ISpriteDataContainer } from './animation'; import { IPartColor } from './structure'; export interface IAvatarImage extends IDisposable @@ -17,7 +17,7 @@ export interface IAvatarImage extends IDisposable getLayerData(_arg_1: ISpriteDataContainer): IAnimationLayerData; getImage(setType: string, hightlight: boolean, scale?: number, cache?: boolean): RenderTexture; getImageAsSprite(setType: string, scale?: number): Sprite; - getCroppedImage(setType: string, scale?: number): HTMLImageElement; + getCroppedImage(setType: string, scale?: number): Promise; getAsset(_arg_1: string): IGraphicAsset; getDirection(): number; getFigure(): IAvatarFigureContainer; diff --git a/src/api/nitro/camera/IRoomCameraWidgetManager.ts b/src/api/nitro/camera/IRoomCameraWidgetManager.ts index d8847e9f..8bca5c06 100644 --- a/src/api/nitro/camera/IRoomCameraWidgetManager.ts +++ b/src/api/nitro/camera/IRoomCameraWidgetManager.ts @@ -6,7 +6,7 @@ import { IRoomCameraWidgetSelectedEffect } from './IRoomCameraWidgetSelectedEffe export interface IRoomCameraWidgetManager { init(): void; - applyEffects(texture: Texture, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): HTMLImageElement; + applyEffects(texture: Texture, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise; events: IEventDispatcher; effects: Map; isLoaded: boolean; diff --git a/src/api/nitro/room/IImageResult.ts b/src/api/nitro/room/IImageResult.ts index ee286f52..d89fd041 100644 --- a/src/api/nitro/room/IImageResult.ts +++ b/src/api/nitro/room/IImageResult.ts @@ -5,5 +5,5 @@ export interface IImageResult id: number; data: RenderTexture; image: HTMLImageElement; - getImage(): HTMLImageElement; + getImage(): Promise; } diff --git a/src/api/nitro/room/IRoomEngine.ts b/src/api/nitro/room/IRoomEngine.ts index b1f42942..98dd3769 100644 --- a/src/api/nitro/room/IRoomEngine.ts +++ b/src/api/nitro/room/IRoomEngine.ts @@ -84,7 +84,7 @@ export interface IRoomEngine extends INitroManager processRoomObjectPlacement(placementSource: string, id: number, category: number, typeId: number, legacyString?: string, stuffData?: IObjectData, state?: number, frameNumber?: number, posture?: string): boolean; dispatchMouseEvent(canvasId: number, x: number, y: number, type: string, altKey: boolean, ctrlKey: boolean, shiftKey: boolean, buttonDown: boolean): void; createTextureFromRoom(roomId: number, canvasId?: number, bounds?: Rectangle): RenderTexture; - saveTextureAsScreenshot(texture: RenderTexture, saveAsThumbnail?: boolean): void; + saveTextureAsScreenshot(texture: RenderTexture, saveAsThumbnail?: boolean): Promise; saveBase64AsScreenshot(base64: string, saveAsThumbnail?: boolean): void; deleteRoomObject(objectId: number, objectCategory: number): boolean; sessionDataManager: ISessionDataManager; diff --git a/src/nitro/avatar/AvatarImage.ts b/src/nitro/avatar/AvatarImage.ts index 30f15f49..43119433 100644 --- a/src/nitro/avatar/AvatarImage.ts +++ b/src/nitro/avatar/AvatarImage.ts @@ -5,12 +5,12 @@ import { Rectangle } from '@pixi/math'; import { Sprite } from '@pixi/sprite'; import { AdvancedMap, AvatarAction, AvatarDirectionAngle, AvatarScaleType, AvatarSetType, IActionDefinition, IActiveActionData, IAdvancedMap, IAnimationLayerData, IAvatarDataContainer, IAvatarEffectListener, IAvatarFigureContainer, IAvatarImage, IGraphicAsset, IPartColor, ISpriteDataContainer } from '../../api'; import { GetTickerTime, NitroContainer, NitroSprite, PaletteMapFilter, PixiApplicationProxy, TextureUtils } from '../../pixi-proxy'; -import { ActiveActionData } from './actions'; -import { AssetAliasCollection } from './alias'; import { AvatarFigureContainer } from './AvatarFigureContainer'; import { AvatarStructure } from './AvatarStructure'; -import { AvatarImageCache } from './cache'; import { EffectAssetDownloadManager } from './EffectAssetDownloadManager'; +import { ActiveActionData } from './actions'; +import { AssetAliasCollection } from './alias'; +import { AvatarImageCache } from './cache'; export class AvatarImage implements IAvatarImage, IAvatarEffectListener { @@ -543,7 +543,7 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener return container; } - public getCroppedImage(setType: string, scale: number = 1): HTMLImageElement + public async getCroppedImage(setType: string, scale: number = 1): Promise { if(!this._mainAction) return null; @@ -604,11 +604,7 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener const texture = TextureUtils.generateTexture(container, new Rectangle(0, 0, avatarCanvas.width, avatarCanvas.height)); - const image = TextureUtils.generateImage(texture); - - if(!image) return null; - - return image; + return await TextureUtils.generateImage(texture); } protected getFullImage(k: string): RenderTexture diff --git a/src/nitro/camera/RoomCameraWidgetManager.ts b/src/nitro/camera/RoomCameraWidgetManager.ts index 1270463d..a8cb14de 100644 --- a/src/nitro/camera/RoomCameraWidgetManager.ts +++ b/src/nitro/camera/RoomCameraWidgetManager.ts @@ -50,7 +50,7 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager this.events.dispatchEvent(new RoomCameraWidgetManagerEvent(RoomCameraWidgetManagerEvent.INITIALIZED)); } - public applyEffects(texture: Texture, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): HTMLImageElement + public async applyEffects(texture: Texture, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise { const container = new NitroContainer(); const sprite = new NitroSprite(texture); @@ -86,7 +86,7 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager } } - return TextureUtils.generateImage(container); + return await TextureUtils.generateImage(container); } public get effects(): Map diff --git a/src/nitro/communication/messages/outgoing/camera/RenderRoomMessageComposer.ts b/src/nitro/communication/messages/outgoing/camera/RenderRoomMessageComposer.ts index 940b731b..9097c59b 100644 --- a/src/nitro/communication/messages/outgoing/camera/RenderRoomMessageComposer.ts +++ b/src/nitro/communication/messages/outgoing/camera/RenderRoomMessageComposer.ts @@ -21,9 +21,9 @@ export class RenderRoomMessageComposer implements IMessageComposer { - const url = TextureUtils.generateImageUrl(texture); + const url = await TextureUtils.generateImageUrl(texture); if(!url) return; diff --git a/src/nitro/room/ImageResult.ts b/src/nitro/room/ImageResult.ts index b59e4961..eb86c741 100644 --- a/src/nitro/room/ImageResult.ts +++ b/src/nitro/room/ImageResult.ts @@ -8,12 +8,12 @@ export class ImageResult implements IImageResult public data: RenderTexture = null; public image: HTMLImageElement = null; - public getImage(): HTMLImageElement + public async getImage(): Promise { if(this.image) return this.image; if(!this.data) return null; - return TextureUtils.generateImage(this.data); + return await TextureUtils.generateImage(this.data); } } diff --git a/src/nitro/room/RoomEngine.ts b/src/nitro/room/RoomEngine.ts index d912d445..507baab2 100644 --- a/src/nitro/room/RoomEngine.ts +++ b/src/nitro/room/RoomEngine.ts @@ -10,13 +10,13 @@ import { PetFigureData } from '../avatar'; import { RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer } from '../communication'; import { FurniId } from '../utils'; import { ImageResult } from './ImageResult'; -import { ObjectAvatarCarryObjectUpdateMessage, ObjectAvatarChatUpdateMessage, ObjectAvatarDanceUpdateMessage, ObjectAvatarEffectUpdateMessage, ObjectAvatarExperienceUpdateMessage, ObjectAvatarExpressionUpdateMessage, ObjectAvatarFigureUpdateMessage, ObjectAvatarFlatControlUpdateMessage, ObjectAvatarGestureUpdateMessage, ObjectAvatarGuideStatusUpdateMessage, ObjectAvatarMutedUpdateMessage, ObjectAvatarOwnMessage, ObjectAvatarPetGestureUpdateMessage, ObjectAvatarPlayerValueUpdateMessage, ObjectAvatarPlayingGameUpdateMessage, ObjectAvatarPostureUpdateMessage, ObjectAvatarSignUpdateMessage, ObjectAvatarSleepUpdateMessage, ObjectAvatarTypingUpdateMessage, ObjectAvatarUpdateMessage, ObjectAvatarUseObjectUpdateMessage, ObjectDataUpdateMessage, ObjectGroupBadgeUpdateMessage, ObjectHeightUpdateMessage, ObjectItemDataUpdateMessage, ObjectModelDataUpdateMessage, ObjectMoveUpdateMessage, ObjectRoomColorUpdateMessage, ObjectRoomFloorHoleUpdateMessage, ObjectRoomMaskUpdateMessage, ObjectRoomPlanePropertyUpdateMessage, ObjectRoomPlaneVisibilityUpdateMessage, ObjectRoomUpdateMessage, ObjectStateUpdateMessage } from './messages'; -import { RoomLogic, RoomMapData, RoomObjectVisualizationFactory } from './object'; import { RoomContentLoader } from './RoomContentLoader'; import { RoomMessageHandler } from './RoomMessageHandler'; import { RoomObjectEventHandler } from './RoomObjectEventHandler'; import { RoomObjectLogicFactory } from './RoomObjectLogicFactory'; import { RoomVariableEnum } from './RoomVariableEnum'; +import { ObjectAvatarCarryObjectUpdateMessage, ObjectAvatarChatUpdateMessage, ObjectAvatarDanceUpdateMessage, ObjectAvatarEffectUpdateMessage, ObjectAvatarExperienceUpdateMessage, ObjectAvatarExpressionUpdateMessage, ObjectAvatarFigureUpdateMessage, ObjectAvatarFlatControlUpdateMessage, ObjectAvatarGestureUpdateMessage, ObjectAvatarGuideStatusUpdateMessage, ObjectAvatarMutedUpdateMessage, ObjectAvatarOwnMessage, ObjectAvatarPetGestureUpdateMessage, ObjectAvatarPlayerValueUpdateMessage, ObjectAvatarPlayingGameUpdateMessage, ObjectAvatarPostureUpdateMessage, ObjectAvatarSignUpdateMessage, ObjectAvatarSleepUpdateMessage, ObjectAvatarTypingUpdateMessage, ObjectAvatarUpdateMessage, ObjectAvatarUseObjectUpdateMessage, ObjectDataUpdateMessage, ObjectGroupBadgeUpdateMessage, ObjectHeightUpdateMessage, ObjectItemDataUpdateMessage, ObjectModelDataUpdateMessage, ObjectMoveUpdateMessage, ObjectRoomColorUpdateMessage, ObjectRoomFloorHoleUpdateMessage, ObjectRoomMaskUpdateMessage, ObjectRoomPlanePropertyUpdateMessage, ObjectRoomPlaneVisibilityUpdateMessage, ObjectRoomUpdateMessage, ObjectStateUpdateMessage } from './messages'; +import { RoomLogic, RoomMapData, RoomObjectVisualizationFactory } from './object'; import { RoomCamera, RoomData, RoomFurnitureData, RoomInstanceData, RoomObjectBadgeImageAssetListener, SpriteDataCollector } from './utils'; export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreator, IRoomEngineServices, IRoomManagerListener, IRoomContentListener, IUpdateReceiver, IDisposable @@ -1745,16 +1745,19 @@ export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreato if(icon) { - const image = TextureUtils.generateImage(icon); - - if(this.events) + (async () => { - const event = new NitroToolbarAnimateIconEvent(image, screenLocation.x, screenLocation.y); + const image = await TextureUtils.generateImage(icon); - event.iconName = ToolbarIconEnum.INVENTORY; + if(this.events) + { + const event = new NitroToolbarAnimateIconEvent(image, screenLocation.x, screenLocation.y); - this.events.dispatchEvent(event); - } + event.iconName = ToolbarIconEnum.INVENTORY; + + this.events.dispatchEvent(event); + } + })(); } } } @@ -1790,16 +1793,19 @@ export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreato if(icon) { - const image = TextureUtils.generateImage(icon); - - if(this.events) + (async () => { - const event = new NitroToolbarAnimateIconEvent(image, screenLocation.x, screenLocation.y); + const image = await TextureUtils.generateImage(icon); - event.iconName = ToolbarIconEnum.INVENTORY; + if(this.events) + { + const event = new NitroToolbarAnimateIconEvent(image, screenLocation.x, screenLocation.y); - this.events.dispatchEvent(event); - } + event.iconName = ToolbarIconEnum.INVENTORY; + + this.events.dispatchEvent(event); + } + })(); } } } @@ -3400,14 +3406,14 @@ export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreato return texture; } - public saveTextureAsScreenshot(texture: RenderTexture, saveAsThumbnail: boolean = false): void + public async saveTextureAsScreenshot(texture: RenderTexture, saveAsThumbnail: boolean = false): Promise { let composer: RenderRoomMessageComposer = null; if(saveAsThumbnail) composer = new RenderRoomThumbnailMessageComposer(); else composer = new RenderRoomMessageComposer(); - composer.assignBitmap(texture); + await composer.assignBitmap(texture); this._communication.connection.send(composer); } diff --git a/src/pixi-proxy/TextureUtils.ts b/src/pixi-proxy/TextureUtils.ts index de4ab8f8..790aca28 100644 --- a/src/pixi-proxy/TextureUtils.ts +++ b/src/pixi-proxy/TextureUtils.ts @@ -28,14 +28,14 @@ export class TextureUtils return Texture.from(image); } - public static generateImage(target: DisplayObject | RenderTexture): HTMLImageElement + public static async generateImage(target: DisplayObject | RenderTexture): Promise { if(!target) return null; return this.getExtractor().image(target); } - public static generateImageUrl(target: DisplayObject | RenderTexture): string + public static async generateImageUrl(target: DisplayObject | RenderTexture): Promise { if(!target) return null;