UNPKG

bp-space-invaders

Version:
72 lines 11.1 kB
import { ASSET_ANIMATION, COLORS, KEY, DESTRUCTION_ANIMATION } from './bomb-constants'; import { AssetClass } from '../asset/asset.class'; export class BombClass extends AssetClass { constructor(gameService, ctx, boundarySetup, guid) { super(gameService, ctx, boundarySetup, guid); this.moves = { [KEY.DOWN]: (asset) => ({ ...asset, y: asset.y + 5 }) }; } spawn() { this.assetAnimation = ASSET_ANIMATION[0]; this.engineAnimation = []; this.destructionAnimations = DESTRUCTION_ANIMATION; this.destructionAnimation = this.destructionAnimations[0]; super.spawn(); } draw() { this.ctx.save(); this.ctx.scale(1, 1); this.drawBomb(); this.ctx.restore(); } drawBomb() { this.assetAnimation.forEach((row, y) => { row.forEach((value, x) => { this.ctx.fillStyle = COLORS[value]; this.ctx.fillRect(this.x + x, this.y + y, 1, 1); }); }); } drawBombDestruction() { this.destructionAnimation.forEach((row, y) => { row.forEach((value, x) => { if (value > 0) { this.ctx.fillStyle = COLORS[value]; this.ctx.fillRect(this.x + x, this.y + y, 1, 1); } }); }); } destructionAnimate(now = 0) { this.destructionTimer.elapsed = now - this.destructionTimer.start; if (this.destructionAnimationCounter === this.destructionAnimations.length) { cancelAnimationFrame(this.destructionRequestId); return; } if (this.destructionTimer.elapsed > 30) { this.destructionTimer.start = now; this.destructionAnimation = this.destructionAnimations[this.destructionAnimationCounter++ % this.destructionAnimations.length]; } this.drawBombDestruction(); this.destructionRequestId = requestAnimationFrame(this.destructionAnimate.bind(this)); } animate(now = 0) { this.engineTimer.elapsed = now - this.engineTimer.start; this.destructionAnimationCounter = 0; if (this.engineTimer.elapsed > 75) { this.engineTimer.start = now; const asset = this.moves['ArrowDown'](this); if (this.gameService.valid(asset, this.boundary)) { this.move(asset); } else { this.destructionAnimate(); this.isDestroyed = true; } } this.draw(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9tYi5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwYWNlLWludmFkZXJzL3NyYy9saWIvYm9tYi9ib21iLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3ZGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU1sRCxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQVU7SUFldkMsWUFDRSxXQUF3QixFQUN4QixHQUE2QixFQUM3QixhQUFpQyxFQUNqQyxJQUFZO1FBRVosS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBakJ2QyxVQUFLLEdBQUc7WUFDZCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1NBQ3RFLENBQUM7SUFnQkYsQ0FBQztJQUtrQixLQUFLO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBS1MsSUFBSTtRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcs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Q0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1NFVF9BTklNQVRJT04sIENPTE9SUywgS0VZLCBERVNUUlVDVElPTl9BTklNQVRJT04gfSBmcm9tICcuL2JvbWItY29uc3RhbnRzJztcbmltcG9ydCB7IElBc3NldCB9IGZyb20gJy4uL2ludGVyZmFjZS9hc3NldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR2FtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2dhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldENsYXNzIH0gZnJvbSAnLi4vYXNzZXQvYXNzZXQuY2xhc3MnO1xuaW1wb3J0IHsgQm91bmRhcnlTZXR1cE1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvYm91bmRhcnktc2V0Lm1vZGVsJztcblxuLyoqXG4gKiBUaGUgQm9tYiBDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgQm9tYkNsYXNzIGV4dGVuZHMgQXNzZXRDbGFzcyB7XG4gIC8qKlxuICAgKiBUaGUgbW92ZXNcbiAgICovXG4gIHByaXZhdGUgbW92ZXMgPSB7XG4gICAgW0tFWS5ET1dOXTogKGFzc2V0OiBJQXNzZXQpOiBJQXNzZXQgPT4gKHsgLi4uYXNzZXQsIHk6IGFzc2V0LnkgKyA1IH0pXG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBnYW1lU2VydmljZSBUaGUgR2FtZVNlcnZpY2VcbiAgICogQHBhcmFtIGN0eCBUaGUgY3R4XG4gICAqIEBwYXJhbSBib3VuZGFyeVNldHVwIFRoZSBCb3VuZGFyeVNldHVwTW9kZWxcbiAgICogQHBhcmFtIGd1aWQgVGhlIGd1aWQgb2YgdGhlIGJvbWJcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBib3VuZGFyeVNldHVwOiBCb3VuZGFyeVNldHVwTW9kZWwsXG4gICAgZ3VpZDogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKGdhbWVTZXJ2aWNlLCBjdHgsIGJvdW5kYXJ5U2V0dXAsIGd1aWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwYXduIHRoZSBib21iXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3Bhd24oKTogdm9pZCB7XG4gICAgdGhpcy5hc3NldEFuaW1hdGlvbiA9IEFTU0VUX0FOSU1BVElPTlswXTtcbiAgICB0aGlzLmVuZ2luZUFuaW1hdGlvbiA9IFtdO1xuICAgIHRoaXMuZGVzdHJ1Y3Rpb25BbmltYXRpb25zID0gREVTVFJVQ1RJT05fQU5JTUFUSU9OO1xuICAgIHRoaXMuZGVzdHJ1Y3Rpb25BbmltYXRpb24gPSB0aGlzLmRlc3RydWN0aW9uQW5pbWF0aW9uc1swXTtcbiAgICBzdXBlci5zcGF3bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgZXZlbnl0aGluZyBuZWNlc3NhcnlcbiAgICovXG4gIHByb3RlY3RlZCBkcmF3KCk6IHZvaWQge1xuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICB0aGlzLmN0eC5zY2FsZSgxLCAxKTtcbiAgICB0aGlzLmRyYXdCb21iKCk7XG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgdGhlIGJvbWJcbiAgICovXG4gIHByaXZhdGUgZHJhd0JvbWIoKTogdm9pZCB7XG4gICAgdGhpcy5hc3NldEFuaW1hdGlvbi5mb3JFYWNoKChyb3csIHkpID0+IHtcbiAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgeCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBDT0xPUlNbdmFsdWVdO1xuICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh0aGlzLnggKyB4LCB0aGlzLnkgKyB5LCAxLCAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgdGhlIGJvbWIgZGVzdHJ1Y3Rpb25cbiAgICovXG4gIHByaXZhdGUgZHJhd0JvbWJEZXN0cnVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3RydWN0aW9uQW5pbWF0aW9uLmZvckVhY2goKHJvdywgeSkgPT4ge1xuICAgICAgcm93LmZvckVhY2goKHZhbHVlLCB4KSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBDT0xPUlNbdmFsdWVdO1xuICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHRoaXMueCArIHgsIHRoaXMueSArIHksIDEsIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBhbGllblxuICAgKiBAcGFyYW0gbm93IHRoZSBjdXJyZW50IHRpbWVcbiAgICovXG4gIHByb3RlY3RlZCBkZXN0cnVjdGlvbkFuaW1hdGUobm93ID0gMCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJ1Y3Rpb25UaW1lci5lbGFwc2VkID0gbm93IC0gdGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0O1xuXG4gICAgaWYgKHRoaXMuZGVzdHJ1Y3Rpb25BbmltYXRpb25Db3VudGVyID09PSB0aGlzLmRlc3RydWN0aW9uQW5pbWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZGVzdHJ1Y3Rpb25SZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlc3RydWN0aW9uVGltZXIuZWxhcHNlZCA+IDMwKSB7XG4gICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuc3RhcnQgPSBub3c7XG4gICAgICB0aGlzLmRlc3RydWN0aW9uQW5pbWF0aW9uID1cbiAgICAgICAgdGhpcy5kZXN0cnVjdGlvbkFuaW1hdGlvbnNbdGhpcy5kZXN0cnVjdGlvbkFuaW1hdGlvbkNvdW50ZXIrKyAlIHRoaXMuZGVzdHJ1Y3Rpb25BbmltYXRpb25zLmxlbmd0aF07XG4gICAgfVxuXG4gICAgdGhpcy5kcmF3Qm9tYkRlc3RydWN0aW9uKCk7XG4gICAgdGhpcy5kZXN0cnVjdGlvblJlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLmRlc3RydWN0aW9uQW5pbWF0ZS5iaW5kKHRoaXMpIGFzIEZyYW1lUmVxdWVzdENhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBib21iXG4gICAqIEBwYXJhbSBub3cgdGhlIGN1cnJlbnQgdGltZVxuICAgKi9cbiAgcHVibGljIGFuaW1hdGUobm93ID0gMCk6IHZvaWQge1xuICAgIHRoaXMuZW5naW5lVGltZXIuZWxhcHNlZCA9IG5vdyAtIHRoaXMuZW5naW5lVGltZXIuc3RhcnQ7XG5cbiAgICB0aGlzLmRlc3RydWN0aW9uQW5pbWF0aW9uQ291bnRlciA9IDA7XG5cbiAgICBpZiAodGhpcy5lbmdpbmVUaW1lci5lbGFwc2VkID4gNzUpIHtcbiAgICAgIHRoaXMuZW5naW5lVGltZXIuc3RhcnQgPSBub3c7XG4gICAgICBjb25zdCBhc3NldCA9IHRoaXMubW92ZXNbJ0Fycm93RG93biddKHRoaXMpO1xuICAgICAgaWYgKHRoaXMuZ2FtZVNlcnZpY2UudmFsaWQoYXNzZXQsIHRoaXMuYm91bmRhcnkpKSB7XG4gICAgICAgIHRoaXMubW92ZShhc3NldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlc3RydWN0aW9uQW5pbWF0ZSgpO1xuICAgICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRyYXcoKTtcbiAgfVxufVxuIl19