UNPKG

bp-space-invaders

Version:
57 lines 9.71 kB
import { AlienClass } from '../alien/alien.class'; import { KEY } from '../alien/alien-constants'; import { ObservableTypeEnum } from '../../enum/observable-type.enum'; import { AssetAlignEnum } from '../../asset/enum/asset-align.enum'; import { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum'; export class AlienBossClass extends AlienClass { constructor(gameService, ctx, boundarySetup, guid, points) { super(gameService, ctx, boundarySetup, guid, points); this.moves = { [KEY.LEFT]: (asset) => ({ ...asset, x: asset.x - 5 }), [KEY.RIGHT]: (asset) => ({ ...asset, x: asset.x + 5 }) }; this.directionLeft = true; this.isAlienAsset = false; } determineBossDirection() { this.directionLeft = Math.floor(Math.random() * 10) + 1 > 5; } positionAlienBoss() { this.determineBossDirection(); const direction = this.directionLeft ? AssetAlignEnum.right : AssetAlignEnum.left; const asset = this.positionAsset(direction, AssetAlignVerticalEnum.top); asset.y = this.y; this.move(asset); this.isDestroyed = false; } animate(now = 0) { this.assetTimer.elapsed = now - this.assetTimer.start; if (this.isDestroyed) { this.destructionAnimate(); return; } if (this.isGameOver) { this.isDestroyed = true; return; } this.destructionAnimationCounter = 0; if (this.assetTimer.elapsed > 200) { this.assetTimer.start = now; this.assetAnimation = this.assetAnimations[this.animationCounter++ % this.assetAnimations.length]; const asset = this.directionLeft ? this.moves['ArrowLeft'](this) : this.moves['ArrowRight'](this); if (this.gameService.valid(asset, this.boundary)) { this.move(asset); } else { this.isDestroyed = true; this.gameService.emitMasterObservableEvent({ type: ObservableTypeEnum.alienBossDestroyed, booleanData: true, pointData: 0 }); } } this.draw(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZW4tYm9zcy5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwYWNlLWludmFkZXJzL3NyYy9saWIvYWxpZW5zL2FsaWVuLWJvc3MvYWxpZW4tYm9zcy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUtwRixNQUFNLE9BQWdCLGNBQWUsU0FBUSxVQUFVO0lBb0JyRCxZQUNFLFdBQXdCLEVBQ3hCLEdBQTZCLEVBQzdCLGFBQWlDLEVBQ2pDLElBQVksRUFDWixNQUFjO1FBRWQsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQW5CL0MsVUFBSyxHQUFHO1lBQ2QsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFhLEVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1NBQ3ZFLENBQUM7UUFpQkEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUtPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUtNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFNZSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUM7b0JBQ3pDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0I7b0JBQzNDLFdBQVcsRUFBRSxJQUFJO29CQUNqQixTQUFTLEVBQUUsQ0FBQztpQkFDTSxDQUFDLENBQUM7YUFDdkI7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9nYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxpZW5DbGFzcyB9IGZyb20gJy4uL2FsaWVuL2FsaWVuLmNsYXNzJztcbmltcG9ydCB7IEtFWSB9IGZyb20gJy4uL2FsaWVuL2FsaWVuLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBJQXNzZXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvYXNzZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9ic2VydmFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL29ic2VydmFibGUubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9vYnNlcnZhYmxlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBCb3VuZGFyeVNldHVwTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC9ib3VuZGFyeS1zZXQubW9kZWwnO1xuaW1wb3J0IHsgQXNzZXRBbGlnbkVudW0gfSBmcm9tICcuLi8uLi9hc3NldC9lbnVtL2Fzc2V0LWFsaWduLmVudW0nO1xuaW1wb3J0IHsgQXNzZXRBbGlnblZlcnRpY2FsRW51bSB9IGZyb20gJy4uLy4uL2Fzc2V0L2VudW0vYXNzZXQtYWxpZ24tdmVydGljYWwuZW51bSc7XG5cbi8qKlxuICogVGhlIEFsaWVuIEJvc3MgQ2xhc3NcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFsaWVuQm9zc0NsYXNzIGV4dGVuZHMgQWxpZW5DbGFzcyB7XG4gIC8qKlxuICAgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzaGlwXG4gICAqL1xuICBwcml2YXRlIGRpcmVjdGlvbkxlZnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgbW92ZXNcbiAgICovXG4gIHByaXZhdGUgbW92ZXMgPSB7XG4gICAgW0tFWS5MRUZUXTogKGFzc2V0OiBJQXNzZXQpOiBJQXNzZXQgPT4gKHsgLi4uYXNzZXQsIHg6IGFzc2V0LnggLSA1IH0pLFxuICAgIFtLRVkuUklHSFRdOiAoYXNzZXQ6IElBc3NldCk6IElBc3NldCA9PiAoeyAuLi5hc3NldCwgeDogYXNzZXQueCArIDUgfSlcbiAgfTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGdhbWVTZXJ2aWNlIFRoZSBHYW1lU2VydmljZVxuICAgKiBAcGFyYW0gY3R4IFRoZSBjdHhcbiAgICogQHBhcmFtIGJvdW5kYXJ5U2V0dXAgVGhlIEJvdW5kYXJ5U2V0dXBNb2RlbFxuICAgKiBAcGFyYW0gZ3VpZCBUaGUgZ3VpZCBvZiB0aGUgYWxpZW5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBib3VuZGFyeVNldHVwOiBCb3VuZGFyeVNldHVwTW9kZWwsXG4gICAgZ3VpZDogbnVtYmVyLFxuICAgIHBvaW50czogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKGdhbWVTZXJ2aWNlLCBjdHgsIGJvdW5kYXJ5U2V0dXAsIGd1aWQsIHBvaW50cyk7XG4gICAgdGhpcy5kaXJlY3Rpb25MZWZ0ID0gdHJ1ZTtcbiAgICB0aGlzLmlzQWxpZW5Bc3NldCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZGlyZWN0aW9uIG9mIHRoZSBib3NzXG4gICAqL1xuICBwcml2YXRlIGRldGVybWluZUJvc3NEaXJlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kaXJlY3Rpb25MZWZ0ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApICsgMSA+IDU7XG4gIH1cblxuICAvKipcbiAgICogcG9zaXRpb25nIHRoZSBhbGllbiBib3NzIGZvciBhbm90aGVyIGZsaWdodFxuICAgKi9cbiAgcHVibGljIHBvc2l0aW9uQWxpZW5Cb3NzKCk6IHZvaWQge1xuICAgIHRoaXMuZGV0ZXJtaW5lQm9zc0RpcmVjdGlvbigpO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uTGVmdCA/IEFzc2V0QWxpZ25FbnVtLnJpZ2h0IDogQXNzZXRBbGlnbkVudW0ubGVmdDtcbiAgICBjb25zdCBhc3NldCA9IHRoaXMucG9zaXRpb25Bc3NldChkaXJlY3Rpb24sIEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0udG9wKTtcbiAgICBhc3NldC55ID0gdGhpcy55O1xuICAgIHRoaXMubW92ZShhc3NldCk7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgdGhlIGFsaWVuXG4gICAqIEBwYXJhbSBub3cgdGhlIGN1cnJlbnQgdGltZVxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFuaW1hdGUobm93ID0gMCk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXRUaW1lci5lbGFwc2VkID0gbm93IC0gdGhpcy5hc3NldFRpbWVyLnN0YXJ0O1xuXG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIHRoaXMuZGVzdHJ1Y3Rpb25BbmltYXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzR2FtZU92ZXIpIHtcbiAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGVzdHJ1Y3Rpb25BbmltYXRpb25Db3VudGVyID0gMDtcblxuICAgIGlmICh0aGlzLmFzc2V0VGltZXIuZWxhcHNlZCA+IDIwMCkge1xuICAgICAgdGhpcy5hc3NldFRpbWVyLnN0YXJ0ID0gbm93O1xuICAgICAgdGhpcy5hc3NldEFuaW1hdGlvbiA9IHRoaXMuYXNzZXRBbmltYXRpb25zW3RoaXMuYW5pbWF0aW9uQ291bnRlcisrICUgdGhpcy5hc3NldEFuaW1hdGlvbnMubGVuZ3RoXTtcbiAgICAgIGNvbnN0IGFzc2V0ID0gdGhpcy5kaXJlY3Rpb25MZWZ0ID8gdGhpcy5tb3Zlc1snQXJyb3dMZWZ0J10odGhpcykgOiB0aGlzLm1vdmVzWydBcnJvd1JpZ2h0J10odGhpcyk7XG4gICAgICBpZiAodGhpcy5nYW1lU2VydmljZS52YWxpZChhc3NldCwgdGhpcy5ib3VuZGFyeSkpIHtcbiAgICAgICAgdGhpcy5tb3ZlKGFzc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdhbWVTZXJ2aWNlLmVtaXRNYXN0ZXJPYnNlcnZhYmxlRXZlbnQoe1xuICAgICAgICAgIHR5cGU6IE9ic2VydmFibGVUeXBlRW51bS5hbGllbkJvc3NEZXN0cm95ZWQsXG4gICAgICAgICAgYm9vbGVhbkRhdGE6IHRydWUsXG4gICAgICAgICAgcG9pbnREYXRhOiAwXG4gICAgICAgIH0gYXMgT2JzZXJ2YWJsZU1vZGVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRyYXcoKTtcbiAgfVxufVxuIl19