uberpong/dev/lib/impact/loader.js

102 lines
2.1 KiB
JavaScript
Executable file

ig.module(
'impact.loader'
)
.requires(
'impact.image',
'impact.font',
'impact.sound'
)
.defines(function(){ "use strict";
ig.Loader = ig.Class.extend({
resources: [],
gameClass: null,
status: 0,
done: false,
_unloaded: [],
_drawStatus: 0,
_intervalId: 0,
_loadCallbackBound: null,
init: function( gameClass, resources ) {
this.gameClass = gameClass;
this.resources = resources;
this._loadCallbackBound = this._loadCallback.bind(this);
for( var i = 0; i < this.resources.length; i++ ) {
this._unloaded.push( this.resources[i].path );
}
},
load: function() {
ig.system.clear( '#000' );
if( !this.resources.length ) {
this.end();
return;
}
for( var i = 0; i < this.resources.length; i++ ) {
this.loadResource( this.resources[i] );
}
this._intervalId = setInterval( this.draw.bind(this), 16 );
},
loadResource: function( res ) {
res.load( this._loadCallbackBound );
},
end: function() {
if( this.done ) { return; }
this.done = true;
clearInterval( this._intervalId );
ig.system.setGame( this.gameClass );
},
draw: function() {
ig.system.context.clearRect( 0 ,0, ig.system.realWidth, ig.system.realHeight );
this._drawStatus += (this.status - this._drawStatus)/5;
var s = ig.system.scale;
var w = ig.system.width * 0.6;
var h = ig.system.height * 0.1;
var x = ig.system.width * 0.5-w/2;
var y = ig.system.height * 0.5-h/2;
ig.system.context.fillStyle = '#000';
//ig.system.context.fillRect( 0, 0, 480, 320 );
ig.system.context.fillStyle = '#fff';
ig.system.context.fillRect( x*s, y*s, w*s, h*s );
ig.system.context.fillStyle = '#000';
ig.system.context.fillRect( x*s+s, y*s+s, w*s-s-s, h*s-s-s );
ig.system.context.fillStyle = '#fff';
ig.system.context.fillRect( x*s, y*s, w*s*this._drawStatus, h*s );
},
_loadCallback: function( path, status ) {
if( status ) {
this._unloaded.erase( path );
}
else {
throw( 'Failed to load resource: ' + path );
}
this.status = 1 - (this._unloaded.length / this.resources.length);
if( this._unloaded.length == 0 ) { // all done?
setTimeout( this.end.bind(this), 250 );
}
}
});
});