/** * @author pjnovas */ var Shoot = DrawableElement.extend({ init: function(options){ this._super(options); this.MOVE_FACTOR = 5; this.dir = options.dir; this.shootImage = options.shootImage; this.collateBricks = options.collateBricks; this.collateAliens = options.collateAliens; this.timer = null; }, build: function(){ }, loop: function(){ var dir = this.dir; var vel = this.MOVE_FACTOR; this.position.y += (vel * dir); if(this.hasCollision()){ this.collided(); return; } }, update: function(){ clearInterval(this.timer); var self = this; this.timer = setInterval(function(){ self.loop(); }, 20); }, draw: function(){ this._super(this.shootImage); }, collided: function(){ this.destroy(); }, destroy: function(){ clearInterval(this.timer); this.collateBricks = null; this.collateAliens = null; this.onDestroy(this); this._super(); }, hasCollision: function(){ var sX = this.position.x; var sY = this.position.y; //TODO: check shoot with if (sY < 0 || sY > 400) return true; function checkCollision(arr){ var cb = arr; var cbLen = cb.length; for(var i=0; i< cbLen; i++){ var cbO = cb[i]; var cbL = cbO.position.x; var cbT = cbO.position.y; var cbR = cbL + cbO.size.width; var cbD = cbT + cbO.size.height; if (sX >= cbL && sX <= cbR && sY >= cbT && sY <= cbD && !cbO.destroyed){ arr[i].collided(); return true; } } return false; } if (checkCollision(this.collateBricks)) return true; if (this.collateAliens && checkCollision(this.collateAliens)) return true; } });