UNPKG

bp-space-invaders

Version:
76 lines 11.7 kB
import { ObservableTypeEnum } from '../enum/observable-type.enum'; import { Missile2Class } from '../missile/missile-2/missile-2.class'; import { BombClass } from '../bomb/bomb.class'; export class ProjectileService { constructor(gameService, ctx, boundary) { this.gameService = gameService; this.ctx = ctx; this.boundary = boundary; this.spaceshipMissiles = []; this.alienBombs = []; this.isGamePaused = false; this.init(); } init() { this.gameService.getMasterObservable().subscribe((event) => { if (event.type === ObservableTypeEnum.missileShot) { this.launchMissile(event); } else if (event.type === ObservableTypeEnum.bombDropped) { this.dropBomb(event); } else if (event.type === ObservableTypeEnum.gamePaused) { this.isGamePaused = event.booleanData; } }); } findUnusedMissile() { return this.spaceshipMissiles.filter((missile) => missile.isDestroyed)[0]; } findUnusedBomb() { return this.alienBombs.filter((bomb) => bomb.isDestroyed)[0]; } getActiveMissiles() { return this.spaceshipMissiles.filter((missile) => !missile.isDestroyed); } getActiveBombs() { return this.alienBombs.filter((bomb) => !bomb.isDestroyed); } removeProjectiles() { this.getActiveMissiles().map((missile) => { missile.isDestroyed = true; }); this.getActiveBombs().map((bomb) => { bomb.isDestroyed = true; }); } animate(now = 0) { if (!this.isGamePaused) { this.getActiveMissiles().map((missile) => { missile.animate(now); }); this.getActiveBombs().map((bomb) => { bomb.animate(now); }); } } launchMissile(event) { let missile = this.findUnusedMissile(); if (!missile) { missile = new Missile2Class(this.gameService, this.ctx, this.boundary, this.spaceshipMissiles.length); this.spaceshipMissiles.push(missile); } missile.isDestroyed = false; missile.move(event.assetCoordinateData); } dropBomb(event) { let bomb = this.findUnusedBomb(); if (!bomb) { bomb = new BombClass(this.gameService, this.ctx, this.boundary, this.alienBombs.length); this.alienBombs.push(bomb); } bomb.isDestroyed = false; bomb.move(event.assetCoordinateData); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BhY2UtaW52YWRlcnMvc3JjL2xpYi9zZXJ2aWNlL3Byb2plY3RpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBTS9DLE1BQU0sT0FBTyxpQkFBaUI7SUFxQjVCLFlBQ1UsV0FBd0IsRUFDeEIsR0FBNkIsRUFDN0IsUUFBNEI7UUFGNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFFcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBS08sSUFBSTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFzQixFQUFFLEVBQUU7WUFDMUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFdBQVcsRUFBRTtnQkFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUMsV0FBVyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNLElBQUksS0FB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QUMsQ0FBQztZQUN4RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2FtZVNlcnZpY2UgfSBmcm9tICcuL2dhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9vYnNlcnZhYmxlLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGVUeXBlRW51bSB9IGZyb20gJy4uL2VudW0vb2JzZXJ2YWJsZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTWlzc2lsZTJDbGFzcyB9IGZyb20gJy4uL21pc3NpbGUvbWlzc2lsZS0yL21pc3NpbGUtMi5jbGFzcyc7XG5pbXBvcnQgeyBNaXNzaWxlQ2xhc3MgfSBmcm9tICcuLi9taXNzaWxlL21pc3NpbGUvbWlzc2lsZS5jbGFzcyc7XG5pbXBvcnQgeyBCb21iQ2xhc3MgfSBmcm9tICcuLi9ib21iL2JvbWIuY2xhc3MnO1xuaW1wb3J0IHsgQm91bmRhcnlTZXR1cE1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvYm91bmRhcnktc2V0Lm1vZGVsJztcblxuLyoqXG4gKiBUaGUgcHJvamVjdGlsZSBzZXJ2aWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZWN0aWxlU2VydmljZSB7XG4gIC8qKlxuICAgKiBUaGUgc3BhY2VzaGlwIG1pc3NpbGVzXG4gICAqL1xuICBwcml2YXRlIHNwYWNlc2hpcE1pc3NpbGVzOiBNaXNzaWxlQ2xhc3NbXTtcbiAgLyoqXG4gICAqIFRoZSBnYW1lIGlzIHBhdXNlZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0dhbWVQYXVzZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgYWxpZW4gYm9tYnNcbiAgICovXG4gIHByaXZhdGUgYWxpZW5Cb21iczogQm9tYkNsYXNzW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0gZ2FtZVNlcnZpY2UgVGhlIEdhbWVTZXJ2aWNlXG4gICAqIEBwYXJhbSBjdHggVGhlIGN0eFxuICAgKiBAcGFyYW0gYm91bmRhcnkgVGhlIGJvdW5kYXJ5IHNldHVwIG1vZGVsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSxcbiAgICBwcml2YXRlIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHByaXZhdGUgYm91bmRhcnk6IEJvdW5kYXJ5U2V0dXBNb2RlbFxuICApIHtcbiAgICB0aGlzLnNwYWNlc2hpcE1pc3NpbGVzID0gW107XG4gICAgdGhpcy5hbGllbkJvbWJzID0gW107XG4gICAgdGhpcy5pc0dhbWVQYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgdGhlIHNlcnZpY2Ugd2l0aCB0aGUgbGlzdGVuZXJcbiAgICovXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdhbWVTZXJ2aWNlLmdldE1hc3Rlck9ic2VydmFibGUoKS5zdWJzY3JpYmUoKGV2ZW50OiBPYnNlcnZhYmxlTW9kZWwpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSBPYnNlcnZhYmxlVHlwZUVudW0ubWlzc2lsZVNob3QpIHtcbiAgICAgICAgdGhpcy5sYXVuY2hNaXNzaWxlKGV2ZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gT2JzZXJ2YWJsZVR5cGVFbnVtLmJvbWJEcm9wcGVkKSB7XG4gICAgICAgIHRoaXMuZHJvcEJvbWIoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSBPYnNlcnZhYmxlVHlwZUVudW0uZ2FtZVBhdXNlZCkge1xuICAgICAgICB0aGlzLmlzR2FtZVBhdXNlZCA9IGV2ZW50LmJvb2xlYW5EYXRhO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW55IHVudXNlZCBtaXNzaWxlc1xuICAgKi9cbiAgcHJpdmF0ZSBmaW5kVW51c2VkTWlzc2lsZSgpOiBNaXNzaWxlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLnNwYWNlc2hpcE1pc3NpbGVzLmZpbHRlcigobWlzc2lsZTogTWlzc2lsZUNsYXNzKSA9PiBtaXNzaWxlLmlzRGVzdHJveWVkKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFueSB1bnVzZWQgYm9tYnNcbiAgICovXG4gIHByaXZhdGUgZmluZFVudXNlZEJvbWIoKTogQm9tYkNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5hbGllbkJvbWJzLmZpbHRlcigoYm9tYjogQm9tYkNsYXNzKSA9PiBib21iLmlzRGVzdHJveWVkKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIEFjdGl2ZSBNaXNzaWxlc1xuICAgKi9cbiAgcHVibGljIGdldEFjdGl2ZU1pc3NpbGVzKCk6IE1pc3NpbGVDbGFzc1tdIHtcbiAgICByZXR1cm4gdGhpcy5zcGFjZXNoaXBNaXNzaWxlcy5maWx0ZXIoKG1pc3NpbGU6IE1pc3NpbGVDbGFzcykgPT4gIW1pc3NpbGUuaXNEZXN0cm95ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgQWN0aXZlIE1pc3NpbGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZlQm9tYnMoKTogQm9tYkNsYXNzW10ge1xuICAgIHJldHVybiB0aGlzLmFsaWVuQm9tYnMuZmlsdGVyKChib21iOiBCb21iQ2xhc3MpID0+ICFib21iLmlzRGVzdHJveWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIHRoZSBwcm9qZWN0aWxlc1xuICAgKi9cbiAgcHVibGljIHJlbW92ZVByb2plY3RpbGVzKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0QWN0aXZlTWlzc2lsZXMoKS5tYXAoKG1pc3NpbGU6IE1pc3NpbGVDbGFzcykgPT4ge1xuICAgICAgbWlzc2lsZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmdldEFjdGl2ZUJvbWJzKCkubWFwKChib21iOiBCb21iQ2xhc3MpID0+IHtcbiAgICAgIGJvbWIuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgdGhlIG1pc3NpbGVzXG4gICAqIEBwYXJhbSBub3cgIHRoZSBjdXJyZW50IHRpbWUgc3RhbXBcbiAgICovXG4gIGFuaW1hdGUobm93ID0gMCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0dhbWVQYXVzZWQpIHtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlTWlzc2lsZXMoKS5tYXAoKG1pc3NpbGU6IE1pc3NpbGVDbGFzcykgPT4ge1xuICAgICAgICBtaXNzaWxlLmFuaW1hdGUobm93KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmdldEFjdGl2ZUJvbWJzKCkubWFwKChib21iOiBCb21iQ2xhc3MpID0+IHtcbiAgICAgICAgYm9tYi5hbmltYXRlKG5vdyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoIGEgTWlzc2lsZVxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGxhdW5jaE1pc3NpbGUoZXZlbnQ6IE9ic2VydmFibGVNb2RlbCk6IHZvaWQge1xuICAgIGxldCBtaXNzaWxlID0gdGhpcy5maW5kVW51c2VkTWlzc2lsZSgpO1xuICAgIGlmICghbWlzc2lsZSkge1xuICAgICAgbWlzc2lsZSA9IG5ldyBNaXNzaWxlMkNsYXNzKHRoaXMuZ2FtZVNlcnZpY2UsIHRoaXMuY3R4LCB0aGlzLmJvdW5kYXJ5LCB0aGlzLnNwYWNlc2hpcE1pc3NpbGVzLmxlbmd0aCk7XG4gICAgICB0aGlzLnNwYWNlc2hpcE1pc3NpbGVzLnB1c2gobWlzc2lsZSk7XG4gICAgfVxuICAgIG1pc3NpbGUuaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAgIG1pc3NpbGUubW92ZShldmVudC5hc3NldENvb3JkaW5hdGVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIGEgYm9tYlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGRyb3BCb21iKGV2ZW50OiBPYnNlcnZhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICBsZXQgYm9tYiA9IHRoaXMuZmluZFVudXNlZEJvbWIoKTtcbiAgICBpZiAoIWJvbWIpIHtcbiAgICAgIGJvbWIgPSBuZXcgQm9tYkNsYXNzKHRoaXMuZ2FtZVNlcnZpY2UsIHRoaXMuY3R4LCB0aGlzLmJvdW5kYXJ5LCB0aGlzLmFsaWVuQm9tYnMubGVuZ3RoKTtcbiAgICAgIHRoaXMuYWxpZW5Cb21icy5wdXNoKGJvbWIpO1xuICAgIH1cbiAgICBib21iLmlzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgICBib21iLm1vdmUoZXZlbnQuYXNzZXRDb29yZGluYXRlRGF0YSk7XG4gIH1cbn1cbiJdfQ==