import { EventDispatcher } from "../events/EventDispatcher";
import { Handler } from "../utils/Handler";
/**
 * 所有资源加载完成时调度。
 * @eventType Event.COMPLETE
 * */
/**
 * 任何资源加载出错时调度。
 * @eventType Event.ERROR
 * */
/**
 * <p> <code>LoaderManager</code> 类用于用于批量加载资源。此类是单例，不要手动实例化此类，请通过Laya.loader访问。</p>
 * <p>全部队列加载完成，会派发 Event.COMPLETE 事件；如果队列中任意一个加载失败，会派发 Event.ERROR 事件，事件回调参数值为加载出错的资源地址。</p>
 * <p> <code>LoaderManager</code> 类提供了以下几种功能：<br/>
 * 多线程：默认5个加载线程，可以通过maxLoader属性修改线程数量；<br/>
 * 多优先级：有0-4共5个优先级，优先级高的优先加载。0最高，4最低；<br/>
 * 重复过滤：自动过滤重复加载（不会有多个相同地址的资源同时加载）以及复用缓存资源，防止重复加载；<br/>
 * 错误重试：资源加载失败后，会重试加载（以最低优先级插入加载队列），retryNum设定加载失败后重试次数，retryDelay设定加载重试的时间间隔。</p>
 * @see laya.net.Loader
 */
export declare class LoaderManager extends EventDispatcher {
    /**@private */
    private static _resMap;
    /**@private */
    static createMap: any;
    /** 加载出错后的重试次数，默认重试一次*/
    retryNum: number;
    /** 延迟时间多久再进行错误重试，默认立即重试*/
    retryDelay: number;
    /** 最大下载线程，默认为5个*/
    maxLoader: number;
    /**@private */
    private _loaders;
    /**@private */
    private _loaderCount;
    /**@private */
    private _resInfos;
    /**@private */
    private _infoPool;
    /**@private */
    private _maxPriority;
    /**@private */
    private _failRes;
    /**@private */
    private _statInfo;
    /**@private */
    getProgress(): number;
    /**@private */
    resetProgress(): void;
    /**
     * <p>创建一个新的 <code>LoaderManager</code> 实例。</p>
     * <p><b>注意：</b>请使用Laya.loader加载资源，这是一个单例，不要手动实例化此类，否则会导致不可预料的问题。</p>
     */
    constructor();
    /**
     * <p>根据clas类型创建一个未初始化资源的对象，随后进行异步加载，资源加载完成后，初始化对象的资源，并通过此对象派发 Event.LOADED 事件，事件回调参数值为此对象本身。套嵌资源的子资源会保留资源路径"?"后的部分。</p>
     * <p>如果url为数组，返回true；否则返回指定的资源类对象，可以通过侦听此对象的 Event.LOADED 事件来判断资源是否已经加载完毕。</p>
     * <p><b>注意：</b>cache参数只能对文件后缀为atlas的资源进行缓存控制，其他资源会忽略缓存，强制重新加载。</p>
     * @param	url			资源地址或者数组。如果url和clas同时指定了资源类型，优先使用url指定的资源类型。参数形如：[{url:xx,clas:xx,priority:xx,params:xx},{url:xx,clas:xx,priority:xx,params:xx}]。
     * @param	complete	加载结束回调。根据url类型不同分为2种情况：1. url为String类型，也就是单个资源地址，如果加载成功，则回调参数值为加载完成的资源，否则为null；2. url为数组类型，指定了一组要加载的资源，如果全部加载成功，则回调参数值为true，否则为false。
     * @param	progress	资源加载进度回调，回调参数值为当前资源加载的进度信息(0-1)。
     * @param	type	资源类型。
     * @param	constructParams		资源构造函数参数。
     * @param	propertyParams		资源属性参数。
     * @param	priority	(default = 1)加载的优先级，优先级高的优先加载。有0-4共5个优先级，0最高，4最低。
     * @param	cache		是否缓存加载的资源。
     * @return	如果url为数组，返回true；否则返回指定的资源类对象。
     */
    create(url: string | (string | createItem)[], complete?: Handler | null, progress?: Handler | null, type?: string | null, constructParams?: any[] | null, propertyParams?: any, priority?: number, cache?: boolean): void;
    /**
     * @private
     */
    private _createOne;
    /**
     * <p>加载资源。资源加载错误时，本对象会派发 Event.ERROR 事件，事件回调参数值为加载出错的资源地址。</p>
     * <p>因为返回值为 LoaderManager 对象本身，所以可以使用如下语法：loaderManager.load(...).load(...);</p>
     * @param	url			要加载的单个资源地址或资源信息数组。比如：简单数组：["a.png","b.png"]；复杂数组[{url:"a.png",type:Loader.IMAGE,size:100,priority:1},{url:"b.json",type:Loader.JSON,size:50,priority:1}]。
     * @param	complete	加载结束回调。根据url类型不同分为2种情况：1. url为String类型，也就是单个资源地址，如果加载成功，则回调参数值为加载完成的资源，否则为null；2. url为数组类型，指定了一组要加载的资源，如果全部加载成功，则回调参数值为true，否则为false。
     * @param	progress	加载进度回调。回调参数值为当前资源的加载进度信息(0-1)。
     * @param	type		资源类型。比如：Loader.IMAGE。
     * @param	priority	(default = 1)加载的优先级，优先级高的优先加载。有0-4共5个优先级，0最高，4最低。
     * @param	cache		是否缓存加载结果。
     * @param	group		分组，方便对资源进行管理。
     * @param	ignoreCache	是否忽略缓存，强制重新加载。
     * @param	useWorkerLoader(default = false)是否使用worker加载（只针对IMAGE类型和ATLAS类型，并且浏览器支持的情况下生效）
     * @return 此 LoaderManager 对象本身。
     */
    load(url: string | (string | loadItem)[], complete?: Handler | null, progress?: Handler | null, type?: string | null, priority?: number, cache?: boolean, group?: string | null, ignoreCache?: boolean, useWorkerLoader?: boolean): LoaderManager;
    private _resInfoLoaded;
    private _next;
    private _doLoad;
    private _endLoad;
    private _addReTry;
    /**
     * 清理指定资源地址缓存。
     * @param	url 资源地址。
     */
    clearRes(url: string): void;
    /**
     * 销毁Texture使用的图片资源，保留texture壳，如果下次渲染的时候，发现texture使用的图片资源不存在，则会自动恢复
     * 相比clearRes，clearTextureRes只是清理texture里面使用的图片资源，并不销毁texture，再次使用到的时候会自动恢复图片资源
     * 而clearRes会彻底销毁texture，导致不能再使用；clearTextureRes能确保立即销毁图片资源，并且不用担心销毁错误，clearRes则采用引用计数方式销毁
     * 【注意】如果图片本身在自动合集里面（默认图片小于512*512），内存是不能被销毁的，此图片被大图合集管理器管理
     * @param	url	图集地址或者texture地址，比如 Loader.clearTextureRes("res/atlas/comp.atlas"); Loader.clearTextureRes("hall/bg.jpg");
     */
    clearTextureRes(url: string): void;
    /**
     * 获取指定资源地址的资源。
     * @param	url 资源地址。
     * @return	返回资源。
     */
    getRes(url: string): any;
    /**
     * 缓存资源。
     * @param	url 资源地址。
     * @param	data 要缓存的内容。
     */
    cacheRes(url: string, data: any): void;
    /**
     * 设置资源分组。
     * @param url 资源地址。
     * @param group 分组名
     */
    setGroup(url: string, group: string): void;
    /**
     * 根据分组清理资源。
     * @param group 分组名
     */
    clearResByGroup(group: string): void;
    /**
     * @private
     * 缓存资源。
     * @param	url 资源地址。
     * @param	data 要缓存的内容。
     */
    static cacheRes(url: string, data: any): void;
    /** 清理当前未完成的加载，所有未加载的内容全部停止加载。*/
    clearUnLoaded(): void;
    /**
     * 根据地址集合清理掉未加载的内容
     * @param	urls 资源地址集合
     */
    cancelLoadByUrls(urls: any[]): void;
    /**
     * 根据地址清理掉未加载的内容
     * @param	url 资源地址
     */
    cancelLoadByUrl(url: string): void;
    /**
     * @private
     * 加载数组里面的资源。
     * @param arr 简单：["a.png","b.png"]，复杂[{url:"a.png",type:Loader.IMAGE,size:100,priority:1,useWorkerLoader:true},{url:"b.json",type:Loader.JSON,size:50,priority:1}]*/
    private _loadAssets;
    /**
     * 解码Texture或者图集
     * @param	urls texture地址或者图集地址集合
     */
    decodeBitmaps(urls: any[]): void;
    private _decodeTexture;
}
export interface loadItem {
    /**@internal */
    url: string;
    /**@internal */
    type?: string;
    /**@internal */
    size?: number;
    /**@internal */
    priority?: number;
    /**@internal */
    useWorkerLoader?: boolean;
    /**@internal */
    progress?: number;
    /**@internal */
    group?: string;
}
export interface createItem {
    url: string;
    /** 资源类型 */
    type?: string;
    priority?: number;
    group?: string;
    /** 资源属性参数。 */
    propertyParams?: any[];
    /** 资源构造函数参数。 */
    constructParams?: any[];
    progress?: number;
}
