Compare commits
8 Commits
2392b83260
...
eadb181d30
Author | SHA1 | Date |
---|---|---|
Divinezx | eadb181d30 | |
billsonnn | d992214c10 | |
billsonnn | d372ecd599 | |
billsonnn | 38a9c746bf | |
billsonnn | e96869d7eb | |
billsonnn | fe20138abf | |
billsonnn | 2ef9d01fa4 | |
billsonnn | a445f91fdc |
|
@ -16,7 +16,7 @@ export interface IAvatarImage extends IDisposable
|
|||
getLayerData(_arg_1: ISpriteDataContainer): IAnimationLayerData;
|
||||
getImage(setType: string, hightlight: boolean, scale?: number, cache?: boolean): Texture;
|
||||
getImageAsSprite(setType: string, scale?: number): Sprite;
|
||||
getCroppedImage(setType: string, scale?: number): Promise<HTMLImageElement>;
|
||||
getCroppedImageUrl(setType: string, scale?: number): Promise<string>;
|
||||
getAsset(_arg_1: string): IGraphicAsset;
|
||||
getDirection(): number;
|
||||
getFigure(): IAvatarFigureContainer;
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
"@nitrots/api": "1.0.0",
|
||||
"@nitrots/eslint-config": "1.0.0",
|
||||
"@nitrots/utils": "1.0.0",
|
||||
"pixi.js": "^8.0.4"
|
||||
"pixi.js": "^8.0.4",
|
||||
"@pixi/gif": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "~5.4.2"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { IAssetData, IAssetManager, IGraphicAsset, IGraphicAssetCollection } from '@nitrots/api';
|
||||
import { ArrayBufferToBase64, NitroBundle, NitroLogger } from '@nitrots/utils';
|
||||
import { NitroBundle, NitroLogger } from '@nitrots/utils';
|
||||
import '@pixi/gif';
|
||||
import { Assets, Spritesheet, SpritesheetData, Texture } from 'pixi.js';
|
||||
import { GraphicAssetCollection } from './GraphicAssetCollection';
|
||||
|
||||
|
@ -100,6 +101,15 @@ export class AssetManager implements IAssetManager
|
|||
{
|
||||
if(!url || !url.length) return false;
|
||||
|
||||
if(url.endsWith('.png') || url.endsWith('.jpg') || url.endsWith('.jpeg') || url.endsWith('.gif'))
|
||||
{
|
||||
const texture = await Assets.load<Texture>(url);
|
||||
|
||||
this.setTexture(url, texture);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const response = await fetch(url);
|
||||
|
||||
if(response.status !== 200) return false;
|
||||
|
@ -117,16 +127,6 @@ export class AssetManager implements IAssetManager
|
|||
await this.processAsset(nitroBundle.texture, nitroBundle.jsonFile as IAssetData);
|
||||
break;
|
||||
}
|
||||
case 'image/png':
|
||||
case 'image/jpeg':
|
||||
case 'image/gif': {
|
||||
const buffer = await response.arrayBuffer();
|
||||
const base64 = ArrayBufferToBase64(buffer);
|
||||
const texture = await Assets.load<Texture>(`data:${ contentType };base64,${ base64 }`);
|
||||
|
||||
this.setTexture(url, texture);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { IGraphicAssetPalette } from '@nitrots/api';
|
||||
import { TextureUtils } from '@nitrots/utils';
|
||||
import { GetRenderer } from '@nitrots/utils';
|
||||
import { Texture } from 'pixi.js';
|
||||
|
||||
export class GraphicAssetPalette implements IGraphicAssetPalette
|
||||
|
@ -20,18 +20,13 @@ export class GraphicAssetPalette implements IGraphicAssetPalette
|
|||
|
||||
public applyPalette(texture: Texture): Texture
|
||||
{
|
||||
const pixelOutput = TextureUtils.getPixels(texture);
|
||||
const pixels = pixelOutput?.pixels;
|
||||
|
||||
if(!pixels) return texture;
|
||||
|
||||
const canvas = document.createElement('canvas');
|
||||
const canvas = GetRenderer().texture.generateCanvas(texture);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const imageData = ctx.createImageData(texture.width, texture.height);
|
||||
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
|
||||
for(let i = 0; i < pixels.length; i += 4)
|
||||
for(let i = 0; i < imageData.data.length; i += 4)
|
||||
{
|
||||
let paletteColor = this._palette[pixels[i + 1]];
|
||||
let paletteColor = this._palette[imageData.data[i + 1]];
|
||||
|
||||
if(paletteColor === undefined) paletteColor = [0, 0, 0];
|
||||
|
||||
|
@ -42,7 +37,12 @@ export class GraphicAssetPalette implements IGraphicAssetPalette
|
|||
|
||||
ctx.putImageData(imageData, 0, 0);
|
||||
|
||||
return Texture.from(canvas);
|
||||
const newTexture = Texture.from(canvas);
|
||||
|
||||
//@ts-ignore
|
||||
newTexture.source.hitMap = imageData.data;
|
||||
|
||||
return newTexture;
|
||||
}
|
||||
|
||||
public get primaryColor(): number
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { AvatarAction, AvatarDirectionAngle, AvatarScaleType, AvatarSetType, IActionDefinition, IActiveActionData, IAdvancedMap, IAnimationLayerData, IAvatarDataContainer, IAvatarEffectListener, IAvatarFigureContainer, IAvatarImage, IGraphicAsset, IPartColor, ISpriteDataContainer } from '@nitrots/api';
|
||||
import { AdvancedMap, GetTickerTime, TextureUtils } from '@nitrots/utils';
|
||||
import { AvatarAction, AvatarDirectionAngle, AvatarScaleType, AvatarSetType, IActionDefinition, IActiveActionData, IAnimationLayerData, IAvatarDataContainer, IAvatarEffectListener, IAvatarFigureContainer, IAvatarImage, IGraphicAsset, IPartColor, ISpriteDataContainer } from '@nitrots/api';
|
||||
import { GetRenderer, GetTickerTime, TextureUtils } from '@nitrots/utils';
|
||||
import { ColorMatrixFilter, Container, Rectangle, RenderTexture, Sprite, Texture } from 'pixi.js';
|
||||
import { AvatarFigureContainer } from './AvatarFigureContainer';
|
||||
import { AvatarStructure } from './AvatarStructure';
|
||||
|
@ -46,8 +46,6 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||
private _sortedActions: IActiveActionData[];
|
||||
private _lastActionsString: string;
|
||||
private _currentActionsString: string;
|
||||
private _fullImageCache: IAdvancedMap<string, Texture>;
|
||||
private _fullImageCacheSize: number = 5;
|
||||
protected _isCachedImage: boolean = false;
|
||||
private _useFullImageCache: boolean = false;
|
||||
private _effectIdInUse: number = -1;
|
||||
|
@ -86,7 +84,6 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||
this._defaultAction = new ActiveActionData(AvatarAction.POSTURE_STAND);
|
||||
this._defaultAction.definition = this._structure.getActionDefinition(AvatarImage.DEFAULT_ACTION);
|
||||
this.resetActions();
|
||||
this._fullImageCache = new AdvancedMap();
|
||||
this._animationFrameCount = 0;
|
||||
}
|
||||
|
||||
|
@ -121,13 +118,6 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||
this._cache = null;
|
||||
}
|
||||
|
||||
if(this._fullImageCache)
|
||||
{
|
||||
for(const k of this._fullImageCache.getValues()) (k && k.destroy());
|
||||
|
||||
this._fullImageCache = null;
|
||||
}
|
||||
|
||||
this._image = null;
|
||||
this._canvasOffsets = null;
|
||||
this._disposed = true;
|
||||
|
@ -534,7 +524,7 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||
return container;
|
||||
}
|
||||
|
||||
public async getCroppedImage(setType: string, scale: number = 1): Promise<HTMLImageElement>
|
||||
public async getCroppedImageUrl(setType: string, scale: number = 1): Promise<string>
|
||||
{
|
||||
if(!this._mainAction) return null;
|
||||
|
||||
|
@ -547,6 +537,13 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||
const setTypes = this.getBodyParts(setType, this._mainAction.definition.geometryType, this._mainDirection);
|
||||
const container = new Container();
|
||||
|
||||
/* const sprite = new Sprite(Texture.EMPTY);
|
||||
|
||||
sprite.width = avatarCanvas.width;
|
||||
sprite.height = avatarCanvas.height;
|
||||
|
||||
container.addChild(sprite); */
|
||||
|
||||
let partCount = (setTypes.length - 1);
|
||||
|
||||
while(partCount >= 0)
|
||||
|
@ -593,10 +590,18 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||
partCount--;
|
||||
}
|
||||
|
||||
return await TextureUtils.generateImage(TextureUtils.generateTexture({
|
||||
const texture = TextureUtils.generateTexture({
|
||||
target: container,
|
||||
frame: new Rectangle(0, 0, avatarCanvas.width, avatarCanvas.height)
|
||||
}));
|
||||
});
|
||||
let canvas = GetRenderer().texture.generateCanvas(texture);
|
||||
const base64 = canvas.toDataURL('image/png');
|
||||
|
||||
canvas = null;
|
||||
|
||||
texture.destroy(true);
|
||||
|
||||
return base64;
|
||||
}
|
||||
|
||||
public getAsset(k: string): IGraphicAsset
|
||||
|
|
|
@ -157,8 +157,7 @@ export class ConfigurationManager implements IConfigurationManager
|
|||
|
||||
public getDefaultConfig(): { [index: string]: any }
|
||||
{
|
||||
//@ts-ignore
|
||||
return NitroConfig as { [index: string]: any };
|
||||
return window.NitroConfig;
|
||||
}
|
||||
|
||||
public get definitions(): Map<string, unknown>
|
||||
|
|
|
@ -42,6 +42,8 @@ export class RoomContentLoader implements IRoomContentLoader
|
|||
this.processFurnitureData(GetSessionDataManager().getAllFurnitureData());
|
||||
|
||||
for(const [index, name] of GetConfiguration().getValue<string[]>('pet.types').entries()) this._pets[name] = index;
|
||||
|
||||
await Promise.all(RoomContentLoader.MANDATORY_LIBRARIES.map(value => this.downloadAsset(value)));
|
||||
}
|
||||
|
||||
public processFurnitureData(furnitureData: IFurnitureData[]): void
|
||||
|
|
|
@ -4,7 +4,6 @@ import { NitroLogger } from '@nitrots/utils';
|
|||
import { GetRoomContentLoader } from './GetRoomContentLoader';
|
||||
import { GetRoomObjectLogicFactory } from './GetRoomObjectLogicFactory';
|
||||
import { GetRoomObjectVisualizationFactory } from './GetRoomObjectVisualizationFactory';
|
||||
import { RoomContentLoader } from './RoomContentLoader';
|
||||
import { RoomInstance } from './RoomInstance';
|
||||
import { RoomObjectManager } from './RoomObjectManager';
|
||||
|
||||
|
@ -30,10 +29,6 @@ export class RoomManager implements IRoomManager, IRoomInstanceContainer
|
|||
GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_SUCCESS, this.onRoomContentLoadedEvent);
|
||||
GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_FAILURE, this.onRoomContentLoadedEvent);
|
||||
GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_CANCEL, this.onRoomContentLoadedEvent);
|
||||
|
||||
const promises = RoomContentLoader.MANDATORY_LIBRARIES.map(value => GetRoomContentLoader().downloadAsset(value));
|
||||
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
public getRoomInstance(roomId: string): IRoomInstance
|
||||
|
|
|
@ -446,7 +446,7 @@ export class RoomPreviewer
|
|||
|
||||
backgroundSprite.width = width;
|
||||
backgroundSprite.height = height;
|
||||
backgroundSprite.tint = this._backgroundColor;
|
||||
//backgroundSprite.tint = this._backgroundColor;
|
||||
}
|
||||
|
||||
this._roomEngine.setRoomInstanceRenderingCanvasMask(this._previewRoomId, RoomPreviewer.PREVIEW_CANVAS_ID, true);
|
||||
|
@ -494,7 +494,7 @@ export class RoomPreviewer
|
|||
public updatePreviewObjectBoundingRectangle(point: Point = null): void
|
||||
{
|
||||
if(!point) point = new Point(0, 0);
|
||||
|
||||
|
||||
const objectBounds = this._roomEngine.getRoomObjectBoundingRectangle(this._previewRoomId, RoomPreviewer.PREVIEW_OBJECT_ID, this._currentPreviewObjectCategory, RoomPreviewer.PREVIEW_CANVAS_ID);
|
||||
|
||||
if(objectBounds && point)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { IAssetPlaneVisualizationLayer, IAssetRoomVisualizationData, IRoomGeometry, IRoomPlane, IVector3D } from '@nitrots/api';
|
||||
import { GetAssetManager } from '@nitrots/assets';
|
||||
import { GetRenderer, PlaneMaskFilter, TextureUtils, Vector3d } from '@nitrots/utils';
|
||||
import { Container, Matrix, Point, Sprite, Texture, TilingSprite } from 'pixi.js';
|
||||
import { Container, Filter, Matrix, Point, Sprite, Texture, TilingSprite } from 'pixi.js';
|
||||
import { RoomGeometry } from '../../../utils';
|
||||
import { RoomPlaneBitmapMask } from './RoomPlaneBitmapMask';
|
||||
import { RoomPlaneRectangleMask } from './RoomPlaneRectangleMask';
|
||||
|
@ -13,6 +13,7 @@ export class RoomPlane implements IRoomPlane
|
|||
public static HORIZONTAL_ANGLE_DEFAULT: number = 45;
|
||||
public static VERTICAL_ANGLE_DEFAULT: number = 30;
|
||||
public static PLANE_GEOMETRY: IRoomGeometry = new RoomGeometry(64, new Vector3d(RoomPlane.HORIZONTAL_ANGLE_DEFAULT, RoomPlane.VERTICAL_ANGLE_DEFAULT), new Vector3d(-10, 0, 0));
|
||||
private static LANDSCAPE_COLOR: number = 0x0082F0;
|
||||
|
||||
public static TYPE_UNDEFINED: number = 0;
|
||||
public static TYPE_WALL: number = 1;
|
||||
|
@ -59,6 +60,7 @@ export class RoomPlane implements IRoomPlane
|
|||
|
||||
private _planeSprite: TilingSprite = null;
|
||||
private _planeTexture: Texture = null;
|
||||
private _maskFilter: Filter = null;
|
||||
|
||||
constructor(origin: IVector3D, location: IVector3D, leftSide: IVector3D, rightSide: IVector3D, type: number, usesMask: boolean, secondaryNormals: IVector3D[], randomSeed: number, textureOffsetX: number = 0, textureOffsetY: number = 0, textureMaxX: number = 0, textureMaxY: number = 0)
|
||||
{
|
||||
|
@ -120,13 +122,16 @@ export class RoomPlane implements IRoomPlane
|
|||
this._disposed = true;
|
||||
}
|
||||
|
||||
public update(geometry: IRoomGeometry, timeSinceStartMs: number): boolean
|
||||
public update(geometry: IRoomGeometry, timeSinceStartMs: number, needsUpdate: boolean = false): boolean
|
||||
{
|
||||
if(!geometry || this._disposed) return false;
|
||||
|
||||
let needsUpdate = false;
|
||||
if(this._geometryUpdateId !== geometry.updateId)
|
||||
{
|
||||
this._geometryUpdateId = geometry.updateId;
|
||||
|
||||
if(this._geometryUpdateId !== geometry.updateId) needsUpdate = true;
|
||||
needsUpdate = true;
|
||||
}
|
||||
|
||||
if(!needsUpdate || !this._canBeVisible)
|
||||
{
|
||||
|
@ -187,7 +192,6 @@ export class RoomPlane implements IRoomPlane
|
|||
|
||||
this._relativeDepth = relativeDepth;
|
||||
this._isVisible = true;
|
||||
this._geometryUpdateId = geometry.updateId;
|
||||
|
||||
Randomizer.setSeed(this._randomSeed);
|
||||
|
||||
|
@ -195,17 +199,6 @@ export class RoomPlane implements IRoomPlane
|
|||
let height = (this._rightSide.length * geometry.scale);
|
||||
const normal = geometry.getCoordinatePosition(this._normal);
|
||||
|
||||
const getRandomColor = () =>
|
||||
{
|
||||
const letters = '0123456789ABCDEF';
|
||||
let color = '0x';
|
||||
for(let i = 0; i < 6; i++)
|
||||
{
|
||||
color += letters[Math.floor(Math.random() * 16)];
|
||||
}
|
||||
return parseInt(color, 16);
|
||||
};
|
||||
|
||||
const getTextureAndColorForPlane = (planeId: string, planeType: number) =>
|
||||
{
|
||||
const dataType: keyof IAssetRoomVisualizationData = (planeType === RoomPlane.TYPE_FLOOR) ? 'floorData' : (planeType === RoomPlane.TYPE_WALL) ? 'wallData' : 'landscapeData';
|
||||
|
@ -316,7 +309,7 @@ export class RoomPlane implements IRoomPlane
|
|||
x: renderOffsetX,
|
||||
y: renderOffsetY
|
||||
},
|
||||
tint: getRandomColor()
|
||||
tint: RoomPlane.LANDSCAPE_COLOR
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
@ -549,9 +542,9 @@ export class RoomPlane implements IRoomPlane
|
|||
|
||||
this._maskChanged = false;
|
||||
|
||||
container.filterArea = container.getBounds().rectangle;
|
||||
if(!this._maskFilter) this._maskFilter = new PlaneMaskFilter({});
|
||||
|
||||
container.filters = [ new PlaneMaskFilter({}) ];
|
||||
if(!container.filters) container.filters = [ this._maskFilter ];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements
|
|||
|
||||
if(this.updatePlaneTexturesAndVisibilities(objectModel)) needsUpdate = true;
|
||||
|
||||
if(this.updatePlanes(geometry, geometryUpdate, time)) needsUpdate = true;
|
||||
if(this.updatePlanes(geometry, geometryUpdate, time, needsUpdate)) needsUpdate = true;
|
||||
|
||||
if(needsUpdate)
|
||||
{
|
||||
|
@ -576,7 +576,7 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements
|
|||
return true;
|
||||
}
|
||||
|
||||
protected updatePlanes(geometry: IRoomGeometry, geometryUpdate: boolean, timeSinceStartMs: number): boolean
|
||||
protected updatePlanes(geometry: IRoomGeometry, geometryUpdate: boolean, timeSinceStartMs: number, needsUpdate: boolean = false): boolean
|
||||
{
|
||||
if(!geometry || !this.object) return false;
|
||||
|
||||
|
@ -614,7 +614,7 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements
|
|||
{
|
||||
sprite.id = plane.uniqueId;
|
||||
|
||||
if(plane.update(geometry, timeSinceStartMs))
|
||||
if(plane.update(geometry, timeSinceStartMs, needsUpdate))
|
||||
{
|
||||
if(plane.visible)
|
||||
{
|
||||
|
|
|
@ -155,7 +155,7 @@ export class PlaneMaskManager
|
|||
|
||||
if(!texture) return true;
|
||||
|
||||
const point = new Point(Math.round(posX) + asset.offsetX, Math.round(posY) + asset.offsetY);
|
||||
const point = new Point((posX + asset.offsetX), (posY + asset.offsetY));
|
||||
|
||||
const matrix = new Matrix();
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { AlphaTolerance } from '@nitrots/api';
|
||||
import { TextureUtils } from '@nitrots/utils';
|
||||
import { GetRenderer } from '@nitrots/utils';
|
||||
import { Point, Sprite, Texture, TextureSource } from 'pixi.js';
|
||||
|
||||
export class ExtendedSprite extends Sprite
|
||||
|
@ -78,10 +78,12 @@ export class ExtendedSprite extends Sprite
|
|||
if(!textureSource) return false;
|
||||
|
||||
const texture = new Texture(textureSource);
|
||||
const pixels = TextureUtils.getPixels(texture);
|
||||
const canvas = GetRenderer().texture.generateCanvas(texture);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
|
||||
//@ts-ignore
|
||||
textureSource.hitMap = pixels.pixels;
|
||||
textureSource.hitMap = imageData.data;
|
||||
texture.destroy();
|
||||
|
||||
return true;
|
||||
|
|
|
@ -56,12 +56,13 @@ export class SessionDataManager implements ISessionDataManager
|
|||
|
||||
public async init(): Promise<void>
|
||||
{
|
||||
await this._furnitureData.init();
|
||||
await this._productData.init();
|
||||
|
||||
this._badgeImageManager.init();
|
||||
this._ignoredUsersManager.init();
|
||||
this._groupInformationManager.init();
|
||||
await Promise.all([
|
||||
this._furnitureData.init(),
|
||||
this._productData.init(),
|
||||
this._badgeImageManager.init(),
|
||||
this._ignoredUsersManager.init(),
|
||||
this._groupInformationManager.init()
|
||||
]);
|
||||
|
||||
GetCommunication().registerMessageEvent(new FigureUpdateEvent((event: FigureUpdateEvent) =>
|
||||
{
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
export { };
|
||||
|
||||
declare global
|
||||
{
|
||||
interface Window
|
||||
{
|
||||
NitroConfig?: { [index: string]: any };
|
||||
}
|
||||
}
|
|
@ -16,6 +16,7 @@ export * from './LegacyExternalInterface';
|
|||
export * from './LinkTracker';
|
||||
export * from './Matrix4x4';
|
||||
export * from './NitroBundle';
|
||||
export * from './NitroConfig';
|
||||
export * from './NitroLogger';
|
||||
export * from './NitroVersion';
|
||||
export * from './Node3D';
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { AbstractRenderer, BrowserAdapter, DOMAdapter, HelloSystem } from 'pixi.js';
|
||||
import { AbstractRenderer, BrowserAdapter, DOMAdapter, HelloSystem, TextureSource } from 'pixi.js';
|
||||
|
||||
HelloSystem.defaultOptions.hello = true;
|
||||
AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat = false;
|
||||
//TextureSource.defaultOptions.scaleMode = 'nearest';
|
||||
TextureSource.defaultOptions.scaleMode = (!(window.devicePixelRatio % 1)) ? 'nearest' : 'linear';
|
||||
DOMAdapter.set(BrowserAdapter);
|
||||
|
||||
export * from '@nitrots/api';
|
||||
|
|
|
@ -199,6 +199,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@pixi/colord/-/colord-2.9.6.tgz#7e4e7851480da6fd3cef4e331f008d60be7e1204"
|
||||
integrity sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==
|
||||
|
||||
"@pixi/gif@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@pixi/gif/-/gif-3.0.0.tgz#dbd3e1bfb2a5d83a84965f5b517cc5dcb8407862"
|
||||
integrity sha512-0am94k1SEwacW6anOiNT9vt3vnefEaiMxkg30nMwvqU3XkIO6sSsFBgQM3UArjDG/quYsujjyZZkyhl7yBF6GQ==
|
||||
|
||||
"@rollup/plugin-typescript@^11.1.6":
|
||||
version "11.1.6"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz#724237d5ec12609ec01429f619d2a3e7d4d1b22b"
|
||||
|
|
Loading…
Reference in New Issue