bp-space-invaders
Version:
The BP Space Invaders Game
64 lines • 10.3 kB
JavaScript
import { MoonDefenseClass } from '../moon-defense/moon-defense.class';
import { AssetAlignEnum } from '../asset/enum/asset-align.enum';
import { AssetAlignVerticalEnum } from '../asset/enum/asset-align-vertical.enum';
import { ObservableTypeEnum } from '../enum/observable-type.enum';
export class MoonDefenseService {
constructor(gameService, ctx, boundary) {
this.gameService = gameService;
this.ctx = ctx;
this.boundary = boundary;
this.moonDefenses = [];
this.setUp();
this.gameService.getMasterObservable().subscribe((resultModel) => {
if (resultModel.type === ObservableTypeEnum.moonDefenseDestroyed) {
this.moonDefenses[resultModel.numberData].isDestroyed = true;
}
else if (resultModel.type === ObservableTypeEnum.alienDrop) {
this.aliensDestroyedMoonbase(resultModel.numberData);
}
});
}
aliensDestroyedMoonbase(alienYPosition) {
const moonbase = this.getActiveMoonBases().pop();
if (moonbase && alienYPosition > moonbase.y) {
this.getActiveMoonBases().map((moonDefense) => {
moonDefense.isDestroyed = true;
});
}
}
setUp() {
Array(3)
.fill(0)
.map(() => {
this.moonDefenses.push(new MoonDefenseClass(this.gameService, this.ctx, this.boundary, this.moonDefenses.length));
});
}
setupMoonBase(isReset, spaceshipYPosition) {
this.moonDefenses.map((moonDefense, index) => {
moonDefense.isDestroyed = false;
if (isReset) {
moonDefense.restore();
}
let moonAsset = moonDefense.positionAsset(AssetAlignEnum.leftFourth, AssetAlignVerticalEnum.middle);
if (index === 1) {
moonAsset = moonDefense.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle);
}
else if (index === 2) {
moonAsset = moonDefense.positionAsset(AssetAlignEnum.rightFourth, AssetAlignVerticalEnum.middle);
}
moonDefense.move({
x: moonAsset.x,
y: spaceshipYPosition - moonDefense.getAssetHeight()
});
});
}
getActiveMoonBases() {
return this.moonDefenses.filter((moonDefense) => !moonDefense.isDestroyed);
}
animate() {
this.getActiveMoonBases().map((moonDefense) => {
moonDefense.animate();
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9vbi1kZWZlbnNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGFjZS1pbnZhZGVycy9zcmMvbGliL3NlcnZpY2UvbW9vbi1kZWZlbnNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBS2xFLE1BQU0sT0FBTyxrQkFBa0I7SUFhN0IsWUFDVSxXQUF3QixFQUN4QixHQUE2QixFQUM3QixRQUE0QjtRQUY1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUEwQjtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUVwQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBNEIsRUFBRSxFQUFFO1lBQ2hGLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUM5RDtpQkFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUMsU0FBUyxFQUFFO2dCQUM1RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3REO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBTU8sdUJBQXVCLENBQUMsY0FBc0I7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakQsSUFBSSxRQUFRLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBNkIsRUFBRSxFQUFFO2dCQUM5RCxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUtPLEtBQUs7UUFDWCxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUMxRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBS00sYUFBYSxDQUFDLE9BQWdCLEVBQUUsa0JBQTBCO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBNkIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNyRSxXQUFXLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLE9BQU8sRUFBRTtnQkFDWCxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdkI7WUFFRCxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEcsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLFNBQVMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0Y7aUJBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixTQUFTLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xHO1lBRUQsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQyxFQUFFLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxjQUFjLEVBQUU7YUFDM0MsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBS00sa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBS00sT0FBTztRQUNaLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQTZCLEVBQUUsRUFBRTtZQUM5RCxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb29uRGVmZW5zZUNsYXNzIH0gZnJvbSAnLi4vbW9vbi1kZWZlbnNlL21vb24tZGVmZW5zZS5jbGFzcyc7XG5pbXBvcnQgeyBCb3VuZGFyeVNldHVwTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9ib3VuZGFyeS1zZXQubW9kZWwnO1xuaW1wb3J0IHsgR2FtZVNlcnZpY2UgfSBmcm9tICcuL2dhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldEFsaWduRW51bSB9IGZyb20gJy4uL2Fzc2V0L2VudW0vYXNzZXQtYWxpZ24uZW51bSc7XG5pbXBvcnQgeyBBc3NldEFsaWduVmVydGljYWxFbnVtIH0gZnJvbSAnLi4vYXNzZXQvZW51bS9hc3NldC1hbGlnbi12ZXJ0aWNhbC5lbnVtJztcbmltcG9ydCB7IElBc3NldCB9IGZyb20gJy4uL2ludGVyZmFjZS9hc3NldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvb2JzZXJ2YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlVHlwZUVudW0gfSBmcm9tICcuLi9lbnVtL29ic2VydmFibGUtdHlwZS5lbnVtJztcblxuLyoqXG4gKiBUaGUgTW9vbiBEZWZlbnNlIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIE1vb25EZWZlbnNlU2VydmljZSB7XG4gIC8qKlxuICAgKiBUaGUgbW9vbiBkZWZlbnNlXG4gICAqL1xuICBwcml2YXRlIG1vb25EZWZlbnNlczogTW9vbkRlZmVuc2VDbGFzc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIGdhbWVTZXJ2aWNlIFRoZSBHYW1lU2VydmljZVxuICAgKiBAcGFyYW0gY3R4IFRoZSBDVFhcbiAgICogQHBhcmFtIGJvdW5kYXJ5U2V0VXAgVGhlIEJvdW5kYXJ5IFNldCB1cFxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBnYW1lU2VydmljZTogR2FtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBwcml2YXRlIGJvdW5kYXJ5OiBCb3VuZGFyeVNldHVwTW9kZWxcbiAgKSB7XG4gICAgdGhpcy5tb29uRGVmZW5zZXMgPSBbXTtcblxuICAgIHRoaXMuc2V0VXAoKTtcblxuICAgIHRoaXMuZ2FtZVNlcnZpY2UuZ2V0TWFzdGVyT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgocmVzdWx0TW9kZWw6IE9ic2VydmFibGVNb2RlbCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdE1vZGVsLnR5cGUgPT09IE9ic2VydmFibGVUeXBlRW51bS5tb29uRGVmZW5zZURlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLm1vb25EZWZlbnNlc1tyZXN1bHRNb2RlbC5udW1iZXJEYXRhXS5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdE1vZGVsLnR5cGUgPT09IE9ic2VydmFibGVUeXBlRW51bS5hbGllbkRyb3ApIHtcbiAgICAgICAgdGhpcy5hbGllbnNEZXN0cm95ZWRNb29uYmFzZShyZXN1bHRNb2RlbC5udW1iZXJEYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGFsaWVucyBoYXZlIGRlc3Ryb3llZCB0aGUgbW9vbmJhc2VzXG4gICAqIEBwYXJhbSBhbGllbllQb3NpdGlvbiBUaGUgYm90dG9tIEFsaWVuIFkgUG9zaXRpb25cbiAgICovXG4gIHByaXZhdGUgYWxpZW5zRGVzdHJveWVkTW9vbmJhc2UoYWxpZW5ZUG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1vb25iYXNlID0gdGhpcy5nZXRBY3RpdmVNb29uQmFzZXMoKS5wb3AoKTtcbiAgICBpZiAobW9vbmJhc2UgJiYgYWxpZW5ZUG9zaXRpb24gPiBtb29uYmFzZS55KSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZU1vb25CYXNlcygpLm1hcCgobW9vbkRlZmVuc2U6IE1vb25EZWZlbnNlQ2xhc3MpID0+IHtcbiAgICAgICAgbW9vbkRlZmVuc2UuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCB0aGUgYmFzZXNcbiAgICovXG4gIHByaXZhdGUgc2V0VXAoKTogdm9pZCB7XG4gICAgQXJyYXkoMylcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5tb29uRGVmZW5zZXMucHVzaChcbiAgICAgICAgICBuZXcgTW9vbkRlZmVuc2VDbGFzcyh0aGlzLmdhbWVTZXJ2aWNlLCB0aGlzLmN0eCwgdGhpcy5ib3VuZGFyeSwgdGhpcy5tb29uRGVmZW5zZXMubGVuZ3RoKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIHRoZSBiYXNlc1xuICAgKi9cbiAgcHVibGljIHNldHVwTW9vbkJhc2UoaXNSZXNldDogYm9vbGVhbiwgc3BhY2VzaGlwWVBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1vb25EZWZlbnNlcy5tYXAoKG1vb25EZWZlbnNlOiBNb29uRGVmZW5zZUNsYXNzLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBtb29uRGVmZW5zZS5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgaWYgKGlzUmVzZXQpIHtcbiAgICAgICAgbW9vbkRlZmVuc2UucmVzdG9yZSgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbW9vbkFzc2V0ID0gbW9vbkRlZmVuc2UucG9zaXRpb25Bc3NldChBc3NldEFsaWduRW51bS5sZWZ0Rm91cnRoLCBBc3NldEFsaWduVmVydGljYWxFbnVtLm1pZGRsZSk7XG4gICAgICBpZiAoaW5kZXggPT09IDEpIHtcbiAgICAgICAgbW9vbkFzc2V0ID0gbW9vbkRlZmVuc2UucG9zaXRpb25Bc3NldChBc3NldEFsaWduRW51bS5jZW50ZXIsIEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0ubWlkZGxlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcbiAgICAgICAgbW9vbkFzc2V0ID0gbW9vbkRlZmVuc2UucG9zaXRpb25Bc3NldChBc3NldEFsaWduRW51bS5yaWdodEZvdXJ0aCwgQXNzZXRBbGlnblZlcnRpY2FsRW51bS5taWRkbGUpO1xuICAgICAgfVxuXG4gICAgICBtb29uRGVmZW5zZS5tb3ZlKHtcbiAgICAgICAgeDogbW9vbkFzc2V0LngsXG4gICAgICAgIHk6IHNwYWNlc2hpcFlQb3NpdGlvbiAtIG1vb25EZWZlbnNlLmdldEFzc2V0SGVpZ2h0KClcbiAgICAgIH0gYXMgSUFzc2V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEFjdGl2ZSBNb29uIEJhc2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZlTW9vbkJhc2VzKCk6IE1vb25EZWZlbnNlQ2xhc3NbXSB7XG4gICAgcmV0dXJuIHRoaXMubW9vbkRlZmVuc2VzLmZpbHRlcigobW9vbkRlZmVuc2U6IE1vb25EZWZlbnNlQ2xhc3MpID0+ICFtb29uRGVmZW5zZS5pc0Rlc3Ryb3llZCk7XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZSB0aGUgaW52YXNpb25cbiAgICovXG4gIHB1YmxpYyBhbmltYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0QWN0aXZlTW9vbkJhc2VzKCkubWFwKChtb29uRGVmZW5zZTogTW9vbkRlZmVuc2VDbGFzcykgPT4ge1xuICAgICAgbW9vbkRlZmVuc2UuYW5pbWF0ZSgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=