bp-space-invaders
Version:
The BP Space Invaders Game
76 lines • 11.7 kB
JavaScript
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==