UNPKG

bp-space-invaders

Version:
69 lines 11.3 kB
import { AssetAlignEnum } from '../asset/enum/asset-align.enum'; import { AssetAlignVerticalEnum } from '../asset/enum/asset-align-vertical.enum'; import { ObservableTypeEnum } from '../enum/observable-type.enum'; import { Spaceship2Class } from '../spaceships/spaceship-2/spaceship-2.class'; export class SpaceshipService { constructor(gameService, ctx, boundary) { this.gameService = gameService; this.ctx = ctx; this.boundary = boundary; this.spaceships = []; this.gameboardBottom = this.gameService.getGameboard().height; this.setUp(); this.gameService.getMasterObservable().subscribe((resultModel) => { if (resultModel.type === ObservableTypeEnum.spaceshipDestroyed) { this.spaceship.isDestroyed = false; this.removeSpaceshipReserve(); } }); } setUp() { Array(2) .fill(0) .map(() => { this.spaceships.unshift(new Spaceship2Class(this.gameService, this.ctx, this.boundary, false)); }); let extraLivesX = 10; this.spaceships .filter((spaceship) => !spaceship.isDestroyed) .map((spaceship) => { spaceship.move({ x: extraLivesX, y: this.gameboardBottom - spaceship.getAssetHeight() }); extraLivesX += 20; }); this.spaceship = new Spaceship2Class(this.gameService, this.ctx, this.boundary, true); } setupSpaceships() { this.spaceship.isDestroyed = false; const spaceshipAsset = this.gameService.positionAsset(this.spaceship, AssetAlignEnum.center, AssetAlignVerticalEnum.bottom); spaceshipAsset.y = this.boundary.height - this.spaceship.getAssetHeight(); this.spaceship.move(spaceshipAsset); this.spaceships.map((spaceship) => { spaceship.isDestroyed = false; }); } getSpaceshipYPosition() { return this.spaceship.y; } isHit(alienBombAsset) { this.spaceship.isHit(alienBombAsset); } getActiveSpaceshipReserves() { return this.spaceships.filter((spaceship) => !spaceship.isDestroyed); } removeSpaceshipReserve() { const reserves = this.getActiveSpaceshipReserves(); if (reserves.length) { reserves[reserves.length - 1].isDestroyed = true; } } animate(now = 0) { this.getActiveSpaceshipReserves().map((spaceship) => { spaceship.animate(now); }); this.spaceship.animate(now); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2VzaGlwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGFjZS1pbnZhZGVycy9zcmMvbGliL3NlcnZpY2Uvc3BhY2VzaGlwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUs5RSxNQUFNLE9BQU8sZ0JBQWdCO0lBcUIzQixZQUNVLFdBQXdCLEVBQ3hCLEdBQTZCLEVBQzdCLFFBQTRCO1FBRjVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBRXBDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFOUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQTRCLEVBQUUsRUFBRTtZQUNoRixJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFLTyxLQUFLO1FBQ1gsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNMLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDUCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsVUFBVTthQUNaLE1BQU0sQ0FBQyxDQUFDLFNBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQzthQUM3RCxHQUFHLENBQUMsQ0FBQyxTQUF5QixFQUFFLEVBQUU7WUFDakMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDYixDQUFDLEVBQUUsV0FBVztnQkFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUFFO2FBQzNDLENBQUMsQ0FBQztZQUNiLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFLTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDbkQsSUFBSSxDQUFDLFNBQVMsRUFDZCxjQUFjLENBQUMsTUFBTSxFQUNyQixzQkFBc0IsQ0FBQyxNQUFNLENBQzlCLENBQUM7UUFDRixjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUF5QixFQUFFLEVBQUU7WUFDaEQsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBS00scUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUtNLEtBQUssQ0FBQyxjQUFzQjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBS08sMEJBQTBCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBS08sc0JBQXNCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ25ELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNuQixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUtNLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUF5QixFQUFFLEVBQUU7WUFDbEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvdW5kYXJ5U2V0dXBNb2RlbCB9IGZyb20gJy4uL21vZGVsL2JvdW5kYXJ5LXNldC5tb2RlbCc7XG5pbXBvcnQgeyBHYW1lU2VydmljZSB9IGZyb20gJy4vZ2FtZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0QWxpZ25FbnVtIH0gZnJvbSAnLi4vYXNzZXQvZW51bS9hc3NldC1hbGlnbi5lbnVtJztcbmltcG9ydCB7IEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0gfSBmcm9tICcuLi9hc3NldC9lbnVtL2Fzc2V0LWFsaWduLXZlcnRpY2FsLmVudW0nO1xuaW1wb3J0IHsgSUFzc2V0IH0gZnJvbSAnLi4vaW50ZXJmYWNlL2Fzc2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9vYnNlcnZhYmxlLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGVUeXBlRW51bSB9IGZyb20gJy4uL2VudW0vb2JzZXJ2YWJsZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgU3BhY2VzaGlwQ2xhc3MgfSBmcm9tICcuLi9zcGFjZXNoaXBzL3NwYWNlc2hpcC9zcGFjZXNoaXAuY2xhc3MnO1xuaW1wb3J0IHsgU3BhY2VzaGlwMkNsYXNzIH0gZnJvbSAnLi4vc3BhY2VzaGlwcy9zcGFjZXNoaXAtMi9zcGFjZXNoaXAtMi5jbGFzcyc7XG5cbi8qKlxuICogVGhlIFNwYWNlc2hpcCBzZXJ2aWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGFjZXNoaXBTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBTcGFjZSBzaGlwXG4gICAqL1xuICBwcml2YXRlIHNwYWNlc2hpcDogU3BhY2VzaGlwQ2xhc3M7XG4gIC8qKlxuICAgKiBFeHRyYSBTcGFjZSBzaGlwc1xuICAgKi9cbiAgcHJpdmF0ZSBzcGFjZXNoaXBzOiBTcGFjZXNoaXBDbGFzc1tdO1xuICAvKipcbiAgICogVGhlIGdhbWVib2FyZCBib3R0b21cbiAgICovXG4gIHByaXZhdGUgZ2FtZWJvYXJkQm90dG9tOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0gZ2FtZVNlcnZpY2UgVGhlIEdhbWVTZXJ2aWNlXG4gICAqIEBwYXJhbSBjdHggVGhlIENUWFxuICAgKiBAcGFyYW0gYm91bmRhcnlTZXRVcCBUaGUgQm91bmRhcnkgU2V0IHVwXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSxcbiAgICBwcml2YXRlIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHByaXZhdGUgYm91bmRhcnk6IEJvdW5kYXJ5U2V0dXBNb2RlbFxuICApIHtcbiAgICB0aGlzLnNwYWNlc2hpcHMgPSBbXTtcbiAgICB0aGlzLmdhbWVib2FyZEJvdHRvbSA9IHRoaXMuZ2FtZVNlcnZpY2UuZ2V0R2FtZWJvYXJkKCkuaGVpZ2h0O1xuXG4gICAgdGhpcy5zZXRVcCgpO1xuXG4gICAgdGhpcy5nYW1lU2VydmljZS5nZXRNYXN0ZXJPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChyZXN1bHRNb2RlbDogT2JzZXJ2YWJsZU1vZGVsKSA9PiB7XG4gICAgICBpZiAocmVzdWx0TW9kZWwudHlwZSA9PT0gT2JzZXJ2YWJsZVR5cGVFbnVtLnNwYWNlc2hpcERlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLnNwYWNlc2hpcC5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbW92ZVNwYWNlc2hpcFJlc2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgdGhlIGJhc2VzXG4gICAqL1xuICBwcml2YXRlIHNldFVwKCk6IHZvaWQge1xuICAgIEFycmF5KDIpXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3BhY2VzaGlwcy51bnNoaWZ0KG5ldyBTcGFjZXNoaXAyQ2xhc3ModGhpcy5nYW1lU2VydmljZSwgdGhpcy5jdHgsIHRoaXMuYm91bmRhcnksIGZhbHNlKSk7XG4gICAgICB9KTtcblxuICAgIGxldCBleHRyYUxpdmVzWCA9IDEwO1xuXG4gICAgdGhpcy5zcGFjZXNoaXBzXG4gICAgICAuZmlsdGVyKChzcGFjZXNoaXA6IFNwYWNlc2hpcENsYXNzKSA9PiAhc3BhY2VzaGlwLmlzRGVzdHJveWVkKVxuICAgICAgLm1hcCgoc3BhY2VzaGlwOiBTcGFjZXNoaXBDbGFzcykgPT4ge1xuICAgICAgICBzcGFjZXNoaXAubW92ZSh7XG4gICAgICAgICAgeDogZXh0cmFMaXZlc1gsXG4gICAgICAgICAgeTogdGhpcy5nYW1lYm9hcmRCb3R0b20gLSBzcGFjZXNoaXAuZ2V0QXNzZXRIZWlnaHQoKVxuICAgICAgICB9IGFzIElBc3NldCk7XG4gICAgICAgIGV4dHJhTGl2ZXNYICs9IDIwO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNwYWNlc2hpcCA9IG5ldyBTcGFjZXNoaXAyQ2xhc3ModGhpcy5nYW1lU2VydmljZSwgdGhpcy5jdHgsIHRoaXMuYm91bmRhcnksIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCB0aGUgc3BhY2VzaGlwc1xuICAgKi9cbiAgcHVibGljIHNldHVwU3BhY2VzaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLnNwYWNlc2hpcC5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNwYWNlc2hpcEFzc2V0ID0gdGhpcy5nYW1lU2VydmljZS5wb3NpdGlvbkFzc2V0KFxuICAgICAgdGhpcy5zcGFjZXNoaXAsXG4gICAgICBBc3NldEFsaWduRW51bS5jZW50ZXIsXG4gICAgICBBc3NldEFsaWduVmVydGljYWxFbnVtLmJvdHRvbVxuICAgICk7XG4gICAgc3BhY2VzaGlwQXNzZXQueSA9IHRoaXMuYm91bmRhcnkuaGVpZ2h0IC0gdGhpcy5zcGFjZXNoaXAuZ2V0QXNzZXRIZWlnaHQoKTtcbiAgICB0aGlzLnNwYWNlc2hpcC5tb3ZlKHNwYWNlc2hpcEFzc2V0KTtcblxuICAgIHRoaXMuc3BhY2VzaGlwcy5tYXAoKHNwYWNlc2hpcDogU3BhY2VzaGlwQ2xhc3MpID0+IHtcbiAgICAgIHNwYWNlc2hpcC5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgU3BhY2VzaGlwIFkgUG9zaXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRTcGFjZXNoaXBZUG9zaXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zcGFjZXNoaXAueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgYWN0aXZlIHNwYWNlc2hpcCBpcyBoaXRcbiAgICovXG4gIHB1YmxpYyBpc0hpdChhbGllbkJvbWJBc3NldDogSUFzc2V0KTogdm9pZCB7XG4gICAgdGhpcy5zcGFjZXNoaXAuaXNIaXQoYWxpZW5Cb21iQXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIHJlc2VydmUgc3BhY2VzaGlwc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY3RpdmVTcGFjZXNoaXBSZXNlcnZlcygpOiBTcGFjZXNoaXBDbGFzc1tdIHtcbiAgICByZXR1cm4gdGhpcy5zcGFjZXNoaXBzLmZpbHRlcigoc3BhY2VzaGlwOiBTcGFjZXNoaXBDbGFzcykgPT4gIXNwYWNlc2hpcC5pc0Rlc3Ryb3llZCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgZGVzdHJveWVkIHJlc2VydmUgc3BhY2VzaGlwXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZVNwYWNlc2hpcFJlc2VydmUoKTogdm9pZCB7XG4gICAgY29uc3QgcmVzZXJ2ZXMgPSB0aGlzLmdldEFjdGl2ZVNwYWNlc2hpcFJlc2VydmVzKCk7XG4gICAgaWYgKHJlc2VydmVzLmxlbmd0aCkge1xuICAgICAgcmVzZXJ2ZXNbcmVzZXJ2ZXMubGVuZ3RoIC0gMV0uaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBpbnZhc2lvblxuICAgKi9cbiAgcHVibGljIGFuaW1hdGUobm93ID0gMCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0QWN0aXZlU3BhY2VzaGlwUmVzZXJ2ZXMoKS5tYXAoKHNwYWNlc2hpcDogU3BhY2VzaGlwQ2xhc3MpID0+IHtcbiAgICAgIHNwYWNlc2hpcC5hbmltYXRlKG5vdyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwYWNlc2hpcC5hbmltYXRlKG5vdyk7XG4gIH1cbn1cbiJdfQ==