Вход Регистрация
Файл: Space race/bkcore/threejs/Loader.js
Строк: 217
<?php
/*!
 * @class bkcore.threejs.Loader
 *
 * Loads multiple recources, get progress, callback friendly.
 * Supports textures, texturesCube, geometries, analysers, images.
 * 
 * @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
 */

/*!
 * @package bkcore.threejs
 */
var bkcore bkcore || {};
bkcore.threejs bkcore.threejs || {};

bkcore.NONE undefined;

/**
 * Creates a new loader
 * @param {Object{onLoad, onError, onProgress}} opts Callbacks
 */
bkcore.threejs.Loader = function(opts)
{
    var 
self this;

    
this.jsonLoader = new THREE.JSONLoader();

    
this.errorCallback opts.onError == undefined ? function(s){ console.warn("Error while loading %s.".replace("%s"s)) } : opts.onError;
    
this.loadCallback opts.onLoad == undefined ? function(){ console.log("Loaded.") } : opts.onLoad;
    
this.progressCallback opts.onProgress == undefined ? function(progresstypename){ /**/ } : opts.onProgress;

    
this.types = {
        
texturesnull,
        
texturesCubenull,
        
geometriesnull,
        
analysersnull,
        
imagesnull,
        
soundsnull
    
};

    
this.states = {};
    
this.data = {};

    for(var 
t in this.types)
    {
        
this.data[t] = {};
        
this.states[t] = {};
    }

    
this.progress = {
        
total0,
        
remaining0,
        
loaded0,
        
finishedfalse
    
};
}

/**
 * Load the given list of resources
 * @param  {textures, texturesCube, geometries, analysers, images} data 
 */
bkcore.threejs.Loader.prototype.load = function(data)
{
    var 
self this;

    for(var 
k in this.types)
    {
        if(
k in data)
        {
            var 
size 0;
            for(var 
j in data[k])
                
size++;
            
this.progress.total += size;
            
this.progress.remaining += size;
        }
    }

    for(var 
t in data.textures)
        
this.loadTexture(tdata.textures[t]);

    for(var 
c in data.texturesCube)
        
this.loadTextureCube(cdata.texturesCube[c]);

    for(var 
g in data.geometries)
        
this.loadGeometry(gdata.geometries[g]);

    for(var 
a in data.analysers)
        
this.loadAnalyser(adata.analysers[a]);

    for(var 
i in data.images)
        
this.loadImage(idata.images[i]);

    for(var 
s in data.sounds)
        
this.loadSound(data.sounds[s].srcsdata.sounds[s].loopdata.sounds[s].usePanner);

    
this.progressCallback.call(thisthis.progress);
}

bkcore.threejs.Loader.prototype.updateState = function(typenamestate)
{
    if(!(
type in this.types))
    {
        
console.warn("Unkown loader type.");
        return;
    }

    if(
state == true)
    {
        
this.progress.remaining--;
        
this.progress.loaded++;
        
this.progressCallback.call(thisthis.progresstypename);
    }

    
this.states[type][name] = state;


    if(
this.progress.loaded == this.progress.total)
    {
        
this.loadCallback.call(this);
    }
}

/**
 * Get loaded resource
 * @param  string type [textures, texturesCube, geometries, analysers, images]
 * @param  string name 
 * @return Mixed
 */
bkcore.threejs.Loader.prototype.get = function(typename)
{
    if(!(
type in this.types))
    {
        
console.warn("Unkown loader type.");
        return 
null;
    }
    if(!(
name in this.data[type]))
    {
        
console.warn("Unkown file.");
        return 
null;
    }

    return 
this.data[type][name];
}

bkcore.threejs.Loader.prototype.loaded = function(typename)
{
    if(!(
type in this.types))
    {
        
console.warn("Unkown loader type.");
        return 
null;
    }
    if(!(
name in this.states[type]))
    {
        
console.warn("Unkown file.");
        return 
null;
    }

    return 
this.states[type][name];
}

bkcore.threejs.Loader.prototype.loadTexture = function(nameurl)
{
    var 
self this;
    
this.updateState("textures"namefalse);
    
this.data.textures[name] = THREE.ImageUtils.loadTexture(
        
url
        
bkcore.NONE
        function(){ 
            
self.updateState("textures"nametrue); 
        }, 
        function(){ 
            
self.errorCallback.call(selfname); 
        }
    );
}

bkcore.threejs.Loader.prototype.loadTextureCube = function(nameurl)
{
    var 
self this;

    var 
urls = [
        
url.replace("%1""px"), url.replace("%1""nx"),
        
url.replace("%1""py"), url.replace("%1""ny"),
        
url.replace("%1""pz"), url.replace("%1""nz")
    ];

    
this.updateState("texturesCube"namefalse);
    
this.data.texturesCube[name] = THREE.ImageUtils.loadTextureCube
        
urls
        new 
THREE.CubeRefractionMapping(), 
        function(){ 
            
self.updateState("texturesCube"nametrue); 
        } 
    );
}

bkcore.threejs.Loader.prototype.loadGeometry = function(nameurl)
{
    var 
self this;
    
this.data.geometries[name] = null;
    
this.updateState("geometries"namefalse);
    
this.jsonLoader.load(
        
url
        function(
a){ 
            
self.data.geometries[name] = a;
            
self.updateState("geometries"nametrue); 
        }
    );
}

bkcore.threejs.Loader.prototype.loadAnalyser = function(nameurl)
{
    var 
self this;
    
this.updateState("analysers"namefalse);
    
this.data.analysers[name] = new bkcore.ImageData(
        
url
        function(){ 
            
self.updateState("analysers"nametrue);
        }
    );
}

bkcore.threejs.Loader.prototype.loadImage = function(nameurl)
{
    var 
self this;
    
this.updateState("images"namefalse);
    var 
= new Image();
    
e.onload = function() { 
        
self.updateState("images"nametrue) ;
    };
    
e.crossOrigin "anonymous";
    
e.src url;
    
this.data.images[name] = e;
}

bkcore.threejs.Loader.prototype.loadSound = function(srcnameloop){
    var 
self this;
    
this.updateState("sounds"namefalse);
    
    
bkcore.Audio.addSound(
        
src,
        
name
        
loop
        function(){
            
self.updateState("sounds"nametrue);
        }
    );
    
    
this.data.sounds[name] = {
        
play: function(){
            
bkcore.Audio.play(name);
        },
        
stop: function(){
            
bkcore.Audio.stop(name);
        },
        
volume: function(vol){
            
bkcore.Audio.volume(namevol);
        }
    };
};
?>
Онлайн: 1
Реклама