Make some TextureUtilities async

This commit is contained in:
Bill 2023-07-11 21:55:42 -04:00
parent 02f698f8a9
commit ef7dfe9bb8
11 changed files with 42 additions and 47 deletions

View File

@ -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;

View File

@ -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<HTMLImageElement>;
getAsset(_arg_1: string): IGraphicAsset;
getDirection(): number;
getFigure(): IAvatarFigureContainer;

View File

@ -6,7 +6,7 @@ import { IRoomCameraWidgetSelectedEffect } from './IRoomCameraWidgetSelectedEffe
export interface IRoomCameraWidgetManager
{
init(): void;
applyEffects(texture: Texture<Resource>, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): HTMLImageElement;
applyEffects(texture: Texture<Resource>, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise<HTMLImageElement>;
events: IEventDispatcher;
effects: Map<string, IRoomCameraWidgetEffect>;
isLoaded: boolean;

View File

@ -5,5 +5,5 @@ export interface IImageResult
id: number;
data: RenderTexture;
image: HTMLImageElement;
getImage(): HTMLImageElement;
getImage(): Promise<HTMLImageElement>;
}

View File

@ -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<void>;
saveBase64AsScreenshot(base64: string, saveAsThumbnail?: boolean): void;
deleteRoomObject(objectId: number, objectCategory: number): boolean;
sessionDataManager: ISessionDataManager;

View File

@ -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<HTMLImageElement>
{
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

View File

@ -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<HTMLImageElement>
{
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<string, IRoomCameraWidgetEffect>

View File

@ -21,9 +21,9 @@ export class RenderRoomMessageComposer implements IMessageComposer<ConstructorPa
this._data = [];
}
public assignBitmap(texture: RenderTexture): void
public async assignBitmap(texture: RenderTexture): Promise<void>
{
const url = TextureUtils.generateImageUrl(texture);
const url = await TextureUtils.generateImageUrl(texture);
if(!url) return;

View File

@ -8,12 +8,12 @@ export class ImageResult implements IImageResult
public data: RenderTexture = null;
public image: HTMLImageElement = null;
public getImage(): HTMLImageElement
public async getImage(): Promise<HTMLImageElement>
{
if(this.image) return this.image;
if(!this.data) return null;
return TextureUtils.generateImage(this.data);
return await TextureUtils.generateImage(this.data);
}
}

View File

@ -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<void>
{
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);
}

View File

@ -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<HTMLImageElement>
{
if(!target) return null;
return this.getExtractor().image(target);
}
public static generateImageUrl(target: DisplayObject | RenderTexture): string
public static async generateImageUrl(target: DisplayObject | RenderTexture): Promise<string>
{
if(!target) return null;