Wait for base texture to be valid

This commit is contained in:
Bill 2022-04-11 12:19:38 -04:00
parent 569bce07bf
commit 2021e22bb3
3 changed files with 66 additions and 23 deletions

View File

@ -172,20 +172,36 @@ export class AssetManager extends Disposable implements IAssetManager
this.processAsset(nitroBundle.baseTexture, (nitroBundle.jsonFile as IAssetData), status =>
{
onDownloaded(true, resource.url);
onDownloaded(status, resource.url);
});
continue;
}
if(resourceType === 'image/png')
if((resourceType === 'image/png') || (resourceType === 'image/gif'))
{
const base64 = ArrayBufferToBase64(resource.data);
const texture = new Texture(new BaseTexture('data:image/png;base64,' + base64));
const baseTexture = new BaseTexture(`data:${ resourceType };base64,${ base64 }`);
this.setTexture(resource.name, texture);
if(baseTexture.valid)
{
const texture = new Texture(baseTexture);
onDownloaded(true, resource.url);
this.setTexture(resource.name, texture);
onDownloaded(true, resource.url);
}
else
{
baseTexture.once('update', () =>
{
const texture = new Texture(baseTexture);
this.setTexture(resource.name, texture);
onDownloaded(true, resource.url);
});
}
continue;
}
@ -199,7 +215,16 @@ export class AssetManager extends Disposable implements IAssetManager
{
const spritesheetData = data.spritesheet;
if(spritesheetData && Object.keys(spritesheetData).length)
if(!baseTexture || !spritesheetData || !Object.keys(spritesheetData).length)
{
this.createCollection(data, null);
onDownloaded(true);
return;
}
const createAsset = () =>
{
const spritesheet = new Spritesheet(baseTexture, spritesheetData);
@ -209,13 +234,16 @@ export class AssetManager extends Disposable implements IAssetManager
onDownloaded(true);
});
};
return;
if(baseTexture.valid)
{
createAsset();
}
else
{
baseTexture.once('update', () => createAsset());
}
this.createCollection(data, null);
onDownloaded(true);
}
public get collections(): Map<string, IGraphicAssetCollection>

View File

@ -71,4 +71,4 @@ export class AvatarAssetDownloadLibrary extends EventDispatcher
{
return (this._state === AvatarAssetDownloadLibrary.LOADED);
}
}
}

View File

@ -516,13 +516,14 @@ export class RoomContentLoader implements IFurnitureDataListener
for(const url of assetUrls)
{
if(!url || !url.endsWith('.nitro')) continue;
if(!url || !url.length) continue;
loader
.add({
url,
crossOrigin: 'anonymous',
xhrType: url.endsWith('.nitro') ? LoaderResource.XHR_RESPONSE_TYPE.BUFFER : LoaderResource.XHR_RESPONSE_TYPE.JSON
loadType: LoaderResource.LOAD_TYPE.XHR,
xhrType: LoaderResource.XHR_RESPONSE_TYPE.BUFFER
});
}
@ -563,20 +564,22 @@ export class RoomContentLoader implements IFurnitureDataListener
{
const resource = resources[key];
if(!resource || resource.error)
if(!resource || resource.error || !resource.xhr)
{
onDownloaded(false, resource.url);
return;
}
if(resource.extension === 'nitro')
const resourceType = resource.xhr.getResponseHeader('Content-Type');
if(resourceType === 'application/octet-stream')
{
const nitroBundle = new NitroBundle(resource.data);
this.processAsset(nitroBundle.baseTexture, (nitroBundle.jsonFile as IAssetData), status =>
{
onDownloaded(true, resource.url);
onDownloaded(status, resource.url);
});
continue;
@ -589,7 +592,16 @@ export class RoomContentLoader implements IFurnitureDataListener
{
const spritesheetData = data.spritesheet;
if(spritesheetData && Object.keys(spritesheetData).length)
if(!baseTexture || !spritesheetData || !Object.keys(spritesheetData).length)
{
this.createCollection(data, null);
onDownloaded(true);
return;
}
const createAsset = () =>
{
const spritesheet = new Spritesheet(baseTexture, spritesheetData);
@ -599,13 +611,16 @@ export class RoomContentLoader implements IFurnitureDataListener
onDownloaded(true);
});
};
return;
if(baseTexture.valid)
{
createAsset();
}
else
{
baseTexture.once('update', () => createAsset());
}
this.createCollection(data, null);
onDownloaded(true);
}
public setAssetAliasName(name: string, originalName: string): void