74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
import { IAssetManager } from '../../core/asset/IAssetManager';
|
|
import { EventDispatcher } from '../../core/events/EventDispatcher';
|
|
import { AvatarRenderLibraryEvent } from './events/AvatarRenderLibraryEvent';
|
|
|
|
export class AvatarAssetDownloadLibrary extends EventDispatcher
|
|
{
|
|
public static DOWNLOAD_COMPLETE: string = 'AADL_DOWNLOAD_COMPLETE';
|
|
|
|
private static NOT_LOADED: number = 0;
|
|
private static LOADING: number = 1;
|
|
private static LOADED: number = 2;
|
|
|
|
private _state: number;
|
|
private _libraryName: string;
|
|
private _revision: string;
|
|
private _downloadUrl: string;
|
|
private _assets: IAssetManager;
|
|
|
|
constructor(id: string, revision: string, assets: IAssetManager, assetUrl: string)
|
|
{
|
|
super();
|
|
|
|
this._state = AvatarAssetDownloadLibrary.NOT_LOADED;
|
|
this._libraryName = id;
|
|
this._revision = revision;
|
|
this._downloadUrl = assetUrl;
|
|
this._assets = assets;
|
|
|
|
this._downloadUrl = this._downloadUrl.replace(/%libname%/gi, this._libraryName);
|
|
this._downloadUrl = this._downloadUrl.replace(/%revision%/gi, this._revision);
|
|
|
|
const asset = this._assets.getCollection(this._libraryName);
|
|
|
|
if(asset) this._state = AvatarAssetDownloadLibrary.LOADED;
|
|
}
|
|
|
|
public downloadAsset(): void
|
|
{
|
|
if(!this._assets || (this._state === AvatarAssetDownloadLibrary.LOADING) || (this._state === AvatarAssetDownloadLibrary.LOADED)) return;
|
|
|
|
const asset = this._assets.getCollection(this._libraryName);
|
|
|
|
if(asset)
|
|
{
|
|
this._state = AvatarAssetDownloadLibrary.LOADED;
|
|
|
|
this.dispatchEvent(new AvatarRenderLibraryEvent(AvatarRenderLibraryEvent.DOWNLOAD_COMPLETE, this));
|
|
|
|
return;
|
|
}
|
|
|
|
this._state = AvatarAssetDownloadLibrary.LOADING;
|
|
|
|
this._assets.downloadAsset(this._downloadUrl, (flag: boolean) =>
|
|
{
|
|
if(flag)
|
|
{
|
|
this._state = AvatarAssetDownloadLibrary.LOADED;
|
|
|
|
this.dispatchEvent(new AvatarRenderLibraryEvent(AvatarRenderLibraryEvent.DOWNLOAD_COMPLETE, this));
|
|
}
|
|
});
|
|
}
|
|
|
|
public get libraryName(): string
|
|
{
|
|
return this._libraryName;
|
|
}
|
|
|
|
public get isLoaded(): boolean
|
|
{
|
|
return (this._state === AvatarAssetDownloadLibrary.LOADED);
|
|
}
|
|
} |