dragonbones-runtime
Version:
the tools to build dragonbones file for diffrent framework
121 lines (114 loc) • 5.05 kB
text/typescript
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
namespace eui {
let loaderPool:egret.ImageLoader[] = [];
let callBackMap:any = {};
let loaderMap:any = {};
/**
* Default instance of interface <code>IAssetAdapter</code>.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @includeExample extension/eui/components/supportClasses/DefaultAssetAdapterExample.ts
* @language en_US
*/
/**
* 默认的IAssetAdapter接口实现。
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @includeExample extension/eui/components/supportClasses/DefaultAssetAdapterExample.ts
* @language zh_CN
*/
export class DefaultAssetAdapter implements IAssetAdapter {
/**
* resolve asset.
* @param source the identifier of new asset need to be resolved
* @param callBack callback function when resolving complete
* example:callBack(content:any,source:string):void;
* @param thisObject <code>this</code> object of callback method
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 解析素材
* @param source 待解析的新素材标识符
* @param callBack 解析完成回调函数,示例:callBack(content:any,source:string):void;
* @param thisObject callBack的 this 引用
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public getAsset(source:string, callBack:(data:any, source:string) => void, thisObject:any):void {
let list = callBackMap[source];
if (list) {
list.push([callBack, thisObject]);
return;
}
let loader = loaderPool.pop();
if (!loader) {
loader = new egret.ImageLoader();
}
callBackMap[source] = [[callBack, thisObject]];
loaderMap[loader.$hashCode] = source;
loader.addEventListener(egret.Event.COMPLETE, this.onLoadFinish, this);
loader.addEventListener(egret.IOErrorEvent.IO_ERROR, this.onLoadFinish, this);
loader.load(source);
}
/**
* @private
*
* @param event
*/
private onLoadFinish(event:egret.Event):void {
let loader = event.currentTarget;
loader.removeEventListener(egret.Event.COMPLETE, this.onLoadFinish, this);
loader.removeEventListener(egret.IOErrorEvent.IO_ERROR, this.onLoadFinish, this);
let data:egret.Texture;
if (event.$type == egret.Event.COMPLETE) {
data = new egret.Texture();
data._setBitmapData(loader.data);
loader.data = null;
}
loaderPool.push(loader);
let source = loaderMap[loader.$hashCode];
delete loaderMap[loader.$hashCode];
let list:any[] = callBackMap[source];
delete callBackMap[source];
let length = list.length;
for(let i=0;i<length;i++){
let arr:any[] = list[i];
arr[0].call(arr[1],data,source);
}
}
}
}