LoadingManager是一个下载过程中记录、下载完成情况类,当three.js中的一些文件被下载时通过设置LoadingManager可以及时获取当前文件列表中的下载进度
//正在加载的文件管理
function LoadingManager( onLoad, onProgress, onError ) {
//设置域
var scope = this;
//当前状态为未加载
var isLoading = false;
var itemsLoaded = 0;
var itemsTotal = 0;
var urlModifier = undefined;
// Refer to #5689 for the reason why we don't set .onStart
// in the constructor
//设置回调状态
this.onStart = undefined;
this.onLoad = onLoad;
this.onProgress = onProgress;
this.onError = onError;
//单项开始了
this.itemStart = function ( url ) {
//下载项总数增加
itemsTotal ++;
//如果当前没有下载
if ( isLoading === false ) {
//设置当前开始下载
if ( scope.onStart !== undefined ) {
//开始下载回调,当前下载的url,当前下载的完的数量,当前下载的总数
scope.onStart( url, itemsLoaded, itemsTotal );
}
}
//设置正在下载状态
isLoading = true;
};
//单项结束了
this.itemEnd = function ( url ) {
//下载完成,完成数增加
itemsLoaded ++;
//设置当前处理完成回调
if ( scope.onProgress !== undefined ) {
//开始下载回调,当前下载的url,当前下载的完的数量,当前下载的总数
scope.onProgress( url, itemsLoaded, itemsTotal );
}
//总数和下载完成数相同
if ( itemsLoaded === itemsTotal ) {
//重置下载状态
isLoading = false;
//回调下载完成回调
if ( scope.onLoad !== undefined ) {
scope.onLoad();
}
}
};
//单项出现错误了
this.itemError = function ( url ) {
//错误回调
if ( scope.onError !== undefined ) {
scope.onError( url );
}
};
//设置url解析中间过程
this.resolveURL = function ( url ) {
if ( urlModifier ) {
return urlModifier( url );
}
return url;
};
//设置url中间转换过程
this.setURLModifier = function ( transform ) {
urlModifier = transform;
return this;
};
}