(function(){ 'use strict'; /** * Cube Texture Loader based on {@link https://github.com/mrdoob/three.js/blob/master/src/loaders/CubeTextureLoader.js} * @memberOf PANOLENS.Utils * @namespace */ PANOLENS.Utils.CubeTextureLoader = {}; /** * Load 6 images as a cube texture * @param {array} urls - Array with 6 image urls * @param {function} onLoad - On load callback * @param {function} onProgress - In progress callback * @param {function} onError - On error callback * @return {THREE.CubeTexture} - Cube texture */ PANOLENS.Utils.CubeTextureLoader.load = function ( urls, onLoad, onProgress, onError ) { var texture, loaded, progress, all, loadings; texture = new THREE.CubeTexture( [] ); loaded = 0; progress = {}; all = {}; urls.map( function ( url, index ) { PANOLENS.Utils.ImageLoader.load( url, function ( image ) { texture.images[ index ] = image; loaded++; if ( loaded === 6 ) { texture.needsUpdate = true; onLoad && onLoad( texture ); } }, function ( event ) { progress[ index ] = { loaded: event.loaded, total: event.total }; all.loaded = 0; all.total = 0; loadings = 0; for ( var i in progress ) { loadings++; all.loaded += progress[ i ].loaded; all.total += progress[ i ].total; } if ( loadings < 6 ) { all.total = all.total / loadings * 6; } onProgress && onProgress( all ); }, onError ); } ); return texture; }; })();