/** * @author pjnovas */ var Alien = DrawableElement.extend({ init: function(options){ this._super(options); this.images = options.stateImgs || []; this.destroyedImg = options.destroyedImg || []; this.onWallCollision = options.onWallCollision || []; this.shield = options.shield || null; this.ship = options.ship || null; this.destroyed = false; this.shoots = []; }, build: function(){ }, update: function(){ this.hasCollision(); var sX = this.position.x; if (sX < 20 || sX > (590 - this.size.width)) this.onWallCollision(); var sY = this.position.y + this.size.height; if (sY < 0) this.ship.collided(); }, draw: function(state){ if (!this.destroyed){ var idx = (state) ? 0: 1; this._super(this.images[idx]); } else { this._super(this.destroyedImg[0]); this.destroy(); this.onDestroy(this); } }, hasCollision: function(){ var sX = this.position.x + this.size.width/2; var sY = this.position.y + this.size.height*0.8; 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(true); return true; } } return false; } if (checkCollision(this.shield.bricks)) return true; if (checkCollision([this.ship])) return true; }, collided: function(){ this.destroyed = true; }, destroy: function(){ this._super(); } });