/**
* Sprites namespace
* @namespace
* @memberof PhSim
*/
var Sprites = {
Calc: {}
}
Sprites.Sprite = function() {
this.src = null;
this.w = null;
this.h = null;
this.x = null;
this.y = null;
this.fit = null;
this.repeat = null;
this.object = null;
}
Sprites.renderSprite = function(ctx,sprite) {
var localElm = document.createElement("img");
localElm.src = sprite.src;
if(sprite.spec === true) {
ctx.drawImage(localElm,sprite.x,sprite.y,sprite.w,sprite.h);
}
if(sprite.auto === true) {
ctx.drawImage(localElm,sprite.x,sprite.y,sprite.w,sprite.h);
}
}
Sprites.renderGlobalSprites = function(ctx,simulation) {
for(let i = 0; i < simulation.sprites.length; i++) {
Sprites.renderSprite(ctx,simulation.sprites[i]);
}
}
Sprites.circularSpriteRenderCanvas = function(ctx,canvas,angle) {
var localElm = document.createElement("canvas");
var localCtx = localElm.getContext("2d");
var localImg = document.createElement("img");
localImg.src = canvas.src;
localCtx.rotate(angle);
localCtx.drawImage()
}
/**
*
* The `spriteImgObj` class is used to store catche for sprites.
*
* @constructor
* @param {String[]} sprites - An array of strings representing sources
* @param {Function} onload - A function that is executed when all of the images are loaded.
*/
Sprites.spriteImgObj = function(sprites,onload = function() {}) {
// Force load if sprites list is empty
/**
* Array of catched sprites
*/
Object.defineProperty(this,"array",{
enumerable: false,
value: [],
writable: true,
})
/**
*
* Object of static sprite objects
*
* @type {Object}
* @name PhSim.Sprites.spriteImgObj#static
*/
Object.defineProperty(this,"static",{
enumerable: false,
value: {},
writable: true,
});
/**
*
* Number of loaded sprites
*
* @type {Number}
* @name PhSim.Sprites.spriteImgObj#loaded_n
*/
Object.defineProperty(this,"loaded_n",{
enumerable: false,
value: 0,
writable: true
});
/**
*
* Boolean telling us if it is loaded or not.
*
* @type {Boolean}
* @name PhSim.Sprites.spriteImgObj#length
*/
Object.defineProperty(this,"loaded",{
enumerable: false,
value: false,
writable: true,
});
/**
*
* Function to call if loaded.
*
* @type {Function}
* @name PhSim.Sprites.spriteImgObj#onload
*/
Object.defineProperty(this,"onload",{
enumerable: false,
value: onload,
writable: true
});
/**
*
* URL List
*
* @type {Object}
* @name PhSim.Sprites.spriteImgObj#urls
*/
Object.defineProperty(this,"urls",{
enumerable: false,
value: [],
writable: true
});
/**
*
* Image List
*
* @type {Array}
* @name PhSim.Sprites.spriteImgObj#urls
*/
Object.defineProperty(this,"img",{
enumerable: false,
value: [],
writable: true
});
/**
*
* Image List
*
* @type {Array}
* @name PhSim.Sprites.spriteImgObj#urls
*/
Object.defineProperty(this,"loadedImg",{
enumerable: false,
value: [],
writable: true
});
/**
*
* Length
*
* @type {Number}
* @name PhSim.Sprites.spriteImgObj#length
*/
Object.defineProperty(this,"length",{
enumerable: false,
value: 0,
writable: true,
})
var self = this;
for(var i = 0; i < sprites.length; i++) {
self.addSprite(sprites[i],function(){
if(self.loadedImg.length === self.img.length) {
onload();
}
})
}
if(sprites.length === 0) {
self.onload();
self.loaded = true;
}
}
/**
*
* Add sprite to the Sprite Image Array.
*
* @function
* @this Sprites.spriteImgObj
*
* @param {string|Object} src - Source of sprite. If ```src``` is a string representing
* a url, then the image added has its source as ```src```. If ```src``` is an object,
* then the source is ```src.src```. This means that any object with an ```src``` property
* can be added.
*
* @param {Function} [onload] - a function that is executed when the image loads.
*
* @returns {Image}
*/
Sprites.spriteImgObj.prototype.addSprite = function(src,onload = function() {} ) {
// Insuring that the sprite src stays a string.
if(typeof src === "object" && typeof src.src === "string") {
src = src.src;
}
var self = this;
let img = document.createElement("img");
let f = function() {
self[src] = img;
self.urls.push(src);
self.loadedImg.push(this);
self.length++;
onload();
img.removeEventListener("load",f);
}
img.addEventListener("load",f);
this.img.push(img);
img.src = src;
return img;
}
module.exports = Sprites;