UNPKG

bp-space-invaders

Version:
124 lines 16.8 kB
import { ASSET_ANIMATION, COLORS } from './moon-defense-constants'; import { ObservableTypeEnum } from '../enum/observable-type.enum'; import { AssetClass } from '../asset/asset.class'; export class MoonDefenseClass extends AssetClass { constructor(gameService, ctx, boundarySetup, guid) { super(gameService, ctx, boundarySetup, guid); } spawn() { this.restore(); super.spawn(); } restore() { this.assetAnimation = JSON.parse(JSON.stringify(ASSET_ANIMATION[0])); this.engineAnimation = []; super.restore(); } draw() { this.ctx.save(); this.ctx.translate(this.x, this.y); this.drawMoonDefense(); this.ctx.restore(); } drawMoonDefense() { this.assetAnimation.forEach((row, y) => { row.forEach((value, x) => { if (value > 0) { this.ctx.fillStyle = COLORS[value]; this.ctx.fillRect(x, y, 1, 1); } }); }); } isHitBomb(bombAsset) { if (!this.isDestroyed) { const defenseHit = this.gameService.isHit({ x: this.x, y: this.y, shape: this.shape }, bombAsset); if (defenseHit) { const assetX = Math.round(bombAsset.x - this.x); let rowHit = -1; for (let y = 0; y < this.getAssetHeight(); y++) { if (this.assetAnimation[y][assetX] > 0) { rowHit = y; break; } } for (let y = rowHit; y < rowHit + bombAsset.shape.length; y++) { const row = this.assetAnimation[y]; if (row) { const nextColumn = assetX + 1; this.assetAnimation[y][assetX] = 0; this.assetAnimation[y][nextColumn] = 0; this.shape[y][assetX] = 0; this.shape[y][nextColumn] = 0; } else { break; } } bombAsset.isDestroyed = true; let counter = 0; this.assetAnimation.map((row) => { row.map((value) => { counter += value; }); }); this.isDestroyed = counter === 0; } } } isHitMissile(missileAsset) { if (!this.isDestroyed) { const defenseHit = this.gameService.isHit({ x: this.x, y: this.y, shape: this.shape }, missileAsset); if (defenseHit) { const assetX = Math.round(missileAsset.x - this.x); let rowHit = -1; for (let y = this.getAssetHeight() - 1; y >= 0; y--) { if (this.assetAnimation[y][assetX] > 0) { rowHit = y; break; } } for (let y = rowHit; y > rowHit - missileAsset.shape.length; y--) { const row = this.assetAnimation[y]; if (row) { const nextColumn = assetX + 1; this.assetAnimation[y][assetX] = 0; this.assetAnimation[y][nextColumn] = 0; this.shape[y][assetX] = 0; this.shape[y][nextColumn] = 0; } else { break; } } missileAsset.isDestroyed = true; let counter = 0; this.assetAnimation.map((row) => { row.map((value) => { counter += value; }); }); this.isDestroyed = counter === 0; } } } animate() { if (this.isDestroyed || this.isGameOver) { this.gameService.emitMasterObservableEvent({ type: ObservableTypeEnum.moonDefenseDestroyed, numberData: this.uid }); return; } this.draw(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9vbi1kZWZlbnNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BhY2UtaW52YWRlcnMvc3JjL2xpYi9tb29uLWRlZmVuc2UvbW9vbi1kZWZlbnNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBT2xELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxVQUFVO0lBUTlDLFlBQ0UsV0FBd0IsRUFDeEIsR0FBNkIsRUFDN0IsYUFBaUMsRUFDakMsSUFBWTtRQUVaLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBS2tCLEtBQUs7UUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFLZSxPQUFPO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFlLENBQUM7UUFDbkYsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFMUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFLUyxJQUFJO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxF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R0FBRyxDQUFDLENBQUM7d0JBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQy9CO3lCQUFNO3dCQUNMLE1BQU07cUJBQ1A7aUJBQ0Y7Z0JBRUQsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBRWhDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDOUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO3dCQUN4QixPQUFPLElBQUksS0FBSyxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sS0FBSyxDQUFDLENBQUM7YUFDbEM7U0FDRjtJQUNILENBQUM7SUFLTSxPQUFPO1FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDekMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLG9CQUFvQjtnQkFDN0MsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHO2FBQ0YsQ0FBQyxDQUFDO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFTU0VUX0FOSU1BVElPTiwgQ09MT1JTIH0gZnJvbSAnLi9tb29uLWRlZmVuc2UtY29uc3RhbnRzJztcbmltcG9ydCB7IEdhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9nYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vZW51bS9vYnNlcnZhYmxlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9vYnNlcnZhYmxlLm1vZGVsJztcbmltcG9ydCB7IEFzc2V0Q2xhc3MgfSBmcm9tICcuLi9hc3NldC9hc3NldC5jbGFzcyc7XG5pbXBvcnQgeyBJQXNzZXQgfSBmcm9tICcuLi9pbnRlcmZhY2UvYXNzZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJvdW5kYXJ5U2V0dXBNb2RlbCB9IGZyb20gJy4uL21vZGVsL2JvdW5kYXJ5LXNldC5tb2RlbCc7XG5cbi8qKlxuICogVGhlIE1vb24gRGVmZW5zZSBDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgTW9vbkRlZmVuc2VDbGFzcyBleHRlbmRzIEFzc2V0Q2xhc3Mge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGdhbWVTZXJ2aWNlIFRoZSBHYW1lU2VydmljZVxuICAgKiBAcGFyYW0gY3R4IFRoZSBjdHhcbiAgICogQHBhcmFtIGJvdW5kYXJ5U2V0dXAgVGhlIEJvdW5kYXJ5U2V0dXBNb2RlbFxuICAgKiBAcGFyYW0gZ3VpZCBUaGUgZ3VpZCBvZiB0aGUgYWxpZW5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBib3VuZGFyeVNldHVwOiBCb3VuZGFyeVNldHVwTW9kZWwsXG4gICAgZ3VpZDogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKGdhbWVTZXJ2aWNlLCBjdHgsIGJvdW5kYXJ5U2V0dXAsIGd1aWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwYXduIHRoZSBtb29uRGVmZW5zZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNwYXduKCk6IHZvaWQge1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIHN1cGVyLnNwYXduKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgc3Bhd25cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZXN0b3JlKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXRBbmltYXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFTU0VUX0FOSU1BVElPTlswXSkpIGFzIG51bWJlcltdW107XG4gICAgdGhpcy5lbmdpbmVBbmltYXRpb24gPSBbXTtcblxuICAgIHN1cGVyLnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGV2ZW55dGhpbmcgbmVjZXNzYXJ5XG4gICAqL1xuICBwcm90ZWN0ZWQgZHJhdygpOiB2b2lkIHtcbiAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgdGhpcy5jdHgudHJhbnNsYXRlKHRoaXMueCwgdGhpcy55KTtcbiAgICB0aGlzLmRyYXdNb29uRGVmZW5zZSgpO1xuICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoZSBtb29uRGVmZW5zZVxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3TW9vbkRlZmVuc2UoKTogdm9pZCB7XG4gICAgdGhpcy5hc3NldEFuaW1hdGlvbi5mb3JFYWNoKChyb3csIHkpID0+IHtcbiAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgeCkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPiAwKSB7XG4gICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gQ09MT1JTW3ZhbHVlXTtcbiAgICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh4LCB5LCAxLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhlIG1vb24gZGVmZW5zZSBoaXRcbiAgICogQHBhcmFtIGJvbWJBc3NldCBUaGUgQm9tYiBBc3NldFxuICAgKi9cbiAgaXNIaXRCb21iKGJvbWJBc3NldDogSUFzc2V0KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICBjb25zdCBkZWZlbnNlSGl0ID0gdGhpcy5nYW1lU2VydmljZS5pc0hpdChcbiAgICAgICAge1xuICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgc2hhcGU6IHRoaXMuc2hhcGVcbiAgICAgICAgfSBhcyBJQXNzZXQsXG4gICAgICAgIGJvbWJBc3NldFxuICAgICAgKTtcblxuICAgICAgaWYgKGRlZmVuc2VIaXQpIHtcbiAgICAgICAgY29uc3QgYXNzZXRYID0gTWF0aC5yb3VuZChib21iQXNzZXQueCAtIHRoaXMueCk7XG5cbiAgICAgICAgbGV0IHJvd0hpdCA9IC0xO1xuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuZ2V0QXNzZXRIZWlnaHQoKTsgeSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYXNzZXRBbmltYXRpb25beV1bYXNzZXRYXSA+IDApIHtcbiAgICAgICAgICAgIHJvd0hpdCA9IHk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCB5ID0gcm93SGl0OyB5IDwgcm93SGl0ICsgYm9tYkFzc2V0LnNoYXBlLmxlbmd0aDsgeSsrKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5hc3NldEFuaW1hdGlvblt5XTtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0Q29sdW1uID0gYXNzZXRYICsgMTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXRBbmltYXRpb25beV1bYXNzZXRYXSA9IDA7XG4gICAgICAgICAgICB0aGlzLmFzc2V0QW5pbWF0aW9uW3ldW25leHRDb2x1bW5dID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVbeV1bYXNzZXRYXSA9IDA7XG4gICAgICAgICAgICB0aGlzLnNoYXBlW3ldW25leHRDb2x1bW5dID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYm9tYkFzc2V0LmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgIHRoaXMuYXNzZXRBbmltYXRpb24ubWFwKChyb3cpID0+IHtcbiAgICAgICAgICByb3cubWFwKCh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb3VudGVyICs9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmlzRGVzdHJveWVkID0gY291bnRlciA9PT0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhlIGRlZmVuc2UgaGl0IGJ5IGEgbWlzc2lsZVxuICAgKiBAcGFyYW0gbWlzc2lsZUFzc2V0IFRoZSBNaXNzaWxlIEFzc2V0XG4gICAqL1xuICBpc0hpdE1pc3NpbGUobWlzc2lsZUFzc2V0OiBJQXNzZXQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIGNvbnN0IGRlZmVuc2VIaXQgPSB0aGlzLmdhbWVTZXJ2aWNlLmlzSGl0KFxuICAgICAgICB7XG4gICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICBzaGFwZTogdGhpcy5zaGFwZVxuICAgICAgICB9IGFzIElBc3NldCxcbiAgICAgICAgbWlzc2lsZUFzc2V0XG4gICAgICApO1xuXG4gICAgICBpZiAoZGVmZW5zZUhpdCkge1xuICAgICAgICBjb25zdCBhc3NldFggPSBNYXRoLnJvdW5kKG1pc3NpbGVBc3NldC54IC0gdGhpcy54KTtcblxuICAgICAgICBsZXQgcm93SGl0ID0gLTE7XG4gICAgICAgIGZvciAobGV0IHkgPSB0aGlzLmdldEFzc2V0SGVpZ2h0KCkgLSAxOyB5ID49IDA7IHktLSkge1xuICAgICAgICAgIGlmICh0aGlzLmFzc2V0QW5pbWF0aW9uW3ldW2Fzc2V0WF0gPiAwKSB7XG4gICAgICAgICAgICByb3dIaXQgPSB5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IHJvd0hpdDsgeSA+IHJvd0hpdCAtIG1pc3NpbGVBc3NldC5zaGFwZS5sZW5ndGg7IHktLSkge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuYXNzZXRBbmltYXRpb25beV07XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbHVtbiA9IGFzc2V0WCArIDE7XG4gICAgICAgICAgICB0aGlzLmFzc2V0QW5pbWF0aW9uW3ldW2Fzc2V0WF0gPSAwO1xuICAgICAgICAgICAgdGhpcy5hc3NldEFuaW1hdGlvblt5XVtuZXh0Q29sdW1uXSA9IDA7XG4gICAgICAgICAgICB0aGlzLnNoYXBlW3ldW2Fzc2V0WF0gPSAwO1xuICAgICAgICAgICAgdGhpcy5zaGFwZVt5XVtuZXh0Q29sdW1uXSA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1pc3NpbGVBc3NldC5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLmFzc2V0QW5pbWF0aW9uLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgcm93Lm1hcCgodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY291bnRlciArPSB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGNvdW50ZXIgPT09IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgdGhlIG1vb25EZWZlbnNlXG4gICAqL1xuICBwdWJsaWMgYW5pbWF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCB8fCB0aGlzLmlzR2FtZU92ZXIpIHtcbiAgICAgIHRoaXMuZ2FtZVNlcnZpY2UuZW1pdE1hc3Rlck9ic2VydmFibGVFdmVudCh7XG4gICAgICAgIHR5cGU6IE9ic2VydmFibGVUeXBlRW51bS5tb29uRGVmZW5zZURlc3Ryb3llZCxcbiAgICAgICAgbnVtYmVyRGF0YTogdGhpcy51aWRcbiAgICAgIH0gYXMgT2JzZXJ2YWJsZU1vZGVsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRyYXcoKTtcbiAgfVxufVxuIl19