101 lines
No EOL
2.1 KiB
JavaScript
Executable file
101 lines
No EOL
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() {
|
|
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 );
|
|
}
|
|
}
|
|
});
|
|
|
|
}); |