UNPKG

bp-prism-game

Version:
119 lines 16.8 kB
import { AlienClass } from '../alien/alien.class'; import { ImageLoadedEnum } from '../../enum/image-loaded.enum'; import { PathService } from '../../service/path.service'; import { BLOCK_SIZE } from '../../gameboard/gameboard-constants'; /** * The Alien Dropship Class */ export class AlienDropshipClass extends AlienClass { /** * Constructor * @param gameService The GameService * @param ctx The ctx * @param guid The guid of the alien * @param spawnLocation The guid of the alien */ constructor(gameService, ctx, guid) { super(gameService, ctx, guid); this.tractorBeamTimer = { start: performance.now(), elapsed: 0 }; this.pathService = new PathService(); this.tractorBeamImages = []; this.tractorBeamAnimationCounter = 0; this.tractorBeamScale = 0; this.setAlienDropshipToDeploy(); this.loadAlienDropshipImages(); this.assetScale = { x: 0.2, y: 0.2 }; } /** * Load the alien Images */ loadAlienDropshipImages() { let imagesToLoad = [ImageLoadedEnum.alienDropship1, ImageLoadedEnum.alienDropship2]; imagesToLoad.map((key) => { this.images.push(this.gameService.getImage(key)); }); imagesToLoad = [ImageLoadedEnum.tractorBeam1, ImageLoadedEnum.tractorBeam2, ImageLoadedEnum.tractorBeam3]; imagesToLoad.map((key) => { this.tractorBeamImages.push(this.gameService.getImage(key)); }); this.isImageLoaded = true; this.currentAlien = this.images[0]; this.tractorBeamImage = this.tractorBeamImages[0]; } /** * If the aliens can land */ canLandAliens() { return this.atLandingBase; } /** * Reset the ship to deploy aliens */ setAlienDropshipToDeploy() { this.atLandingBase = false; this.isLeavingBase = false; this.tractorBeamScale = 0.05; } /** * If the aliens have landed */ setAliensLanded() { const gameboard = this.gameService.getBoardSize(); const endingPosition = { x: gameboard.width + BLOCK_SIZE, y: this.nextMove.y + BLOCK_SIZE }; this.allMoves = this.pathService.getAlienDropShipPath(this.nextMove, endingPosition); this.isLeavingBase = true; this.atLandingBase = false; } /** * Draw the alien tractor beam */ drawTractorBeam() { this.ctx.save(); this.ctx.translate(this.x + BLOCK_SIZE / 2, this.y + BLOCK_SIZE / 2); this.ctx.scale(this.assetScale.x * this.tractorBeamScale, this.assetScale.y * this.tractorBeamScale); this.ctx.drawImage(this.tractorBeamImage.imageSource, this.tractorBeamImage.x, this.tractorBeamImage.y); this.ctx.restore(); if (this.tractorBeamScale < 1) { this.tractorBeamScale += 0.05; } } /** * Animate the alien * @param now the current time */ animate(now = 0) { this.assetTimer.elapsed = now - this.assetTimer.start; this.tractorBeamTimer.elapsed = now - this.tractorBeamTimer.start; if (this.stopAnimation()) { this.setAlienDropshipToDeploy(); return; } if (this.assetTimer.elapsed > 75) { this.currentAlien = this.images[this.animationCounter++ % this.images.length]; this.assetTimer.start = now; if (this.allMoves.length > 0 && !this.canLandAliens()) { this.nextMove = this.allMoves.shift(); this.move(this.nextMove); } else if (this.allMoves.length === 0 && !this.canLandAliens()) { this.atLandingBase = true; } else if (this.isLeavingBase && !this.gameService.valid(this.nextMove)) { this.isDestroyed = true; } } if (this.allMoves.length === 0 && this.canLandAliens() && this.tractorBeamTimer.elapsed > 15) { this.tractorBeamImage = this.tractorBeamImages[this.tractorBeamAnimationCounter++ % this.tractorBeamImages.length]; this.tractorBeamTimer.start = now; this.drawTractorBeam(); } this.draw(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZW4tZHJvcHNoaXAuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmlzbS9zcmMvbGliL2FsaWVucy9hbGllbi1kcm9wc2hpcC9hbGllbi1kcm9wc2hpcC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJakU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsVUFBVTtJQWtDaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxXQUF3QixFQUFFLEdBQTZCLEVBQUUsSUFBWTtRQUMvRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixDQUFDLEVBQUUsR0FBRztZQUNOLENBQUMsRUFBRSxHQUFHO1NBQ1ksQ0FB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QUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUU7WUFDNUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDNUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FDbkUsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9nYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxpZW5DbGFzcyB9IGZyb20gJy4uL2FsaWVuL2FsaWVuLmNsYXNzJztcbmltcG9ydCB7IEFzc2V0U2NhbGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL2Fzc2V0LXNjYWxlLm1vZGUnO1xuaW1wb3J0IHsgSW1hZ2VMb2FkZWRFbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9pbWFnZS1sb2FkZWQuZW51bSc7XG5pbXBvcnQgeyBQYXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvcGF0aC5zZXJ2aWNlJztcbmltcG9ydCB7IElBc3NldCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9hc3NldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQkxPQ0tfU0laRSB9IGZyb20gJy4uLy4uL2dhbWVib2FyZC9nYW1lYm9hcmQtY29uc3RhbnRzJztcbmltcG9ydCB7IEltYWdlTG9jYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL2ltYWdlL2ltYWdlLWxvY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7IFRpbWVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC90aW1lci5tb2RlbCc7XG5cbi8qKlxuICogVGhlIEFsaWVuIERyb3BzaGlwIENsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGllbkRyb3BzaGlwQ2xhc3MgZXh0ZW5kcyBBbGllbkNsYXNzIHtcbiAgLyoqXG4gICAqIElmIHRoZSBhbGllbnMgc2hvdWxkIHN0YXJ0IHRvIGxhbmRcbiAgICovXG4gIHByaXZhdGUgYXRMYW5kaW5nQmFzZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSB0cmFjdG9yIGJlYW0gSW1hZ2VcbiAgICovXG4gIHByaXZhdGUgdHJhY3RvckJlYW1JbWFnZTogSW1hZ2VMb2NhdGlvbk1vZGVsO1xuICAvKipcbiAgICogVGhlIHRyYWN0b3IgYmVhbSBJbWFnZVxuICAgKi9cbiAgcHJpdmF0ZSB0cmFjdG9yQmVhbUltYWdlczogSW1hZ2VMb2NhdGlvbk1vZGVsW107XG4gIC8qKlxuICAgKiBUaGUgcGF0aCBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIHBhdGhTZXJ2aWNlOiBQYXRoU2VydmljZTtcbiAgLyoqXG4gICAqIFRoZSBsZWF2aW5nIHRoZSBsYW5kaW5nQmFzZVxuICAgKi9cbiAgcHJpdmF0ZSBpc0xlYXZpbmdCYXNlOiBib29sZWFuO1xuICAvKipcbiAgICogVHJhY3RvciBCZWFtIFNjYWxlXG4gICAqL1xuICBwcml2YXRlIHRyYWN0b3JCZWFtU2NhbGU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBUcmFjdG9yIEJlYW0gVGltbWVyXG4gICAqL1xuICBwcml2YXRlIHRyYWN0b3JCZWFtVGltZXI6IFRpbWVyTW9kZWw7XG4gIC8qKlxuICAgKiBUaGUgVHJhY3RvciBCZWFtIEFuaW1hdGlvbiBDb3VudGVyXG4gICAqL1xuICBwcml2YXRlIHRyYWN0b3JCZWFtQW5pbWF0aW9uQ291bnRlcjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gZ2FtZVNlcnZpY2UgVGhlIEdhbWVTZXJ2aWNlXG4gICAqIEBwYXJhbSBjdHggVGhlIGN0eFxuICAgKiBAcGFyYW0gZ3VpZCBUaGUgZ3VpZCBvZiB0aGUgYWxpZW5cbiAgICogQHBhcmFtIHNwYXduTG9jYXRpb24gVGhlIGd1aWQgb2YgdGhlIGFsaWVuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihnYW1lU2VydmljZTogR2FtZVNlcnZpY2UsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBndWlkOiBudW1iZXIpIHtcbiAgICBzdXBlcihnYW1lU2VydmljZSwgY3R4LCBndWlkKTtcblxuICAgIHRoaXMudHJhY3RvckJlYW1UaW1lciA9IHsgc3RhcnQ6IHBlcmZvcm1hbmNlLm5vdygpLCBlbGFwc2VkOiAwIH07XG4gICAgdGhpcy5wYXRoU2VydmljZSA9IG5ldyBQYXRoU2VydmljZSgpO1xuICAgIHRoaXMudHJhY3RvckJlYW1JbWFnZXMgPSBbXTtcbiAgICB0aGlzLnRyYWN0b3JCZWFtQW5pbWF0aW9uQ291bnRlciA9IDA7XG4gICAgdGhpcy50cmFjdG9yQmVhbVNjYWxlID0gMDtcbiAgICB0aGlzLnNldEFsaWVuRHJvcHNoaXBUb0RlcGxveSgpO1xuXG4gICAgdGhpcy5sb2FkQWxpZW5Ecm9wc2hpcEltYWdlcygpO1xuXG4gICAgdGhpcy5hc3NldFNjYWxlID0ge1xuICAgICAgeDogMC4yLFxuICAgICAgeTogMC4yXG4gICAgfSBhcyBBc3NldFNjYWxlTW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgYWxpZW4gSW1hZ2VzXG4gICAqL1xuICBwcml2YXRlIGxvYWRBbGllbkRyb3BzaGlwSW1hZ2VzKCk6IHZvaWQge1xuICAgIGxldCBpbWFnZXNUb0xvYWQgPSBbSW1hZ2VMb2FkZWRFbnVtLmFsaWVuRHJvcHNoaXAxLCBJbWFnZUxvYWRlZEVudW0uYWxpZW5Ecm9wc2hpcDJdO1xuXG4gICAgaW1hZ2VzVG9Mb2FkLm1hcCgoa2V5OiBJbWFnZUxvYWRlZEVudW0pID0+IHtcbiAgICAgIHRoaXMuaW1hZ2VzLnB1c2godGhpcy5nYW1lU2VydmljZS5nZXRJbWFnZShrZXkpKTtcbiAgICB9KTtcblxuICAgIGltYWdlc1RvTG9hZCA9IFtJbWFnZUxvYWRlZEVudW0udHJhY3RvckJlYW0xLCBJbWFnZUxvYWRlZEVudW0udHJhY3RvckJlYW0yLCBJbWFnZUxvYWRlZEVudW0udHJhY3RvckJlYW0zXTtcblxuICAgIGltYWdlc1RvTG9hZC5tYXAoKGtleTogSW1hZ2VMb2FkZWRFbnVtKSA9PiB7XG4gICAgICB0aGlzLnRyYWN0b3JCZWFtSW1hZ2VzLnB1c2godGhpcy5nYW1lU2VydmljZS5nZXRJbWFnZShrZXkpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuaXNJbWFnZUxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5jdXJyZW50QWxpZW4gPSB0aGlzLmltYWdlc1swXTtcbiAgICB0aGlzLnRyYWN0b3JCZWFtSW1hZ2UgPSB0aGlzLnRyYWN0b3JCZWFtSW1hZ2VzWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhbGllbnMgY2FuIGxhbmRcbiAgICovXG4gIHB1YmxpYyBjYW5MYW5kQWxpZW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF0TGFuZGluZ0Jhc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNoaXAgdG8gZGVwbG95IGFsaWVuc1xuICAgKi9cbiAgcHVibGljIHNldEFsaWVuRHJvcHNoaXBUb0RlcGxveSgpOiB2b2lkIHtcbiAgICB0aGlzLmF0TGFuZGluZ0Jhc2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzTGVhdmluZ0Jhc2UgPSBmYWxzZTtcbiAgICB0aGlzLnRyYWN0b3JCZWFtU2NhbGUgPSAwLjA1O1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhbGllbnMgaGF2ZSBsYW5kZWRcbiAgICovXG4gIHB1YmxpYyBzZXRBbGllbnNMYW5kZWQoKTogdm9pZCB7XG4gICAgY29uc3QgZ2FtZWJvYXJkID0gdGhpcy5nYW1lU2VydmljZS5nZXRCb2FyZFNpemUoKTtcbiAgICBjb25zdCBlbmRpbmdQb3NpdGlvbiA9IHtcbiAgICAgIHg6IGdhbWVib2FyZC53aWR0aCArIEJMT0NLX1NJWkUsXG4gICAgICB5OiB0aGlzLm5leHRNb3ZlLnkgKyBCTE9DS19TSVpFXG4gICAgfSBhcyBJQXNzZXQ7XG4gICAgdGhpcy5hbGxNb3ZlcyA9IHRoaXMucGF0aFNlcnZpY2UuZ2V0QWxpZW5Ecm9wU2hpcFBhdGgodGhpcy5uZXh0TW92ZSwgZW5kaW5nUG9zaXRpb24pO1xuICAgIHRoaXMuaXNMZWF2aW5nQmFzZSA9IHRydWU7XG4gICAgdGhpcy5hdExhbmRpbmdCYXNlID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgYWxpZW4gdHJhY3RvciBiZWFtXG4gICAqL1xuICBwcml2YXRlIGRyYXdUcmFjdG9yQmVhbSgpOiB2b2lkIHtcbiAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgdGhpcy5jdHgudHJhbnNsYXRlKHRoaXMueCArIEJMT0NLX1NJWkUgLyAyLCB0aGlzLnkgKyBCTE9DS19TSVpFIC8gMik7XG4gICAgdGhpcy5jdHguc2NhbGUodGhpcy5hc3NldFNjYWxlLnggKiB0aGlzLnRyYWN0b3JCZWFtU2NhbGUsIHRoaXMuYXNzZXRTY2FsZS55ICogdGhpcy50cmFjdG9yQmVhbVNjYWxlKTtcbiAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy50cmFjdG9yQmVhbUltYWdlLmltYWdlU291cmNlLCB0aGlzLnRyYWN0b3JCZWFtSW1hZ2UueCwgdGhpcy50cmFjdG9yQmVhbUltYWdlLnkpO1xuICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICBpZiAodGhpcy50cmFjdG9yQmVhbVNjYWxlIDwgMSkge1xuICAgICAgdGhpcy50cmFjdG9yQmVhbVNjYWxlICs9IDAuMDU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgdGhlIGFsaWVuXG4gICAqIEBwYXJhbSBub3cgdGhlIGN1cnJlbnQgdGltZVxuICAgKi9cbiAgcHVibGljIGFuaW1hdGUobm93ID0gMCk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXRUaW1lci5lbGFwc2VkID0gbm93IC0gdGhpcy5hc3NldFRpbWVyLnN0YXJ0O1xuICAgIHRoaXMudHJhY3RvckJlYW1UaW1lci5lbGFwc2VkID0gbm93IC0gdGhpcy50cmFjdG9yQmVhbVRpbWVyLnN0YXJ0O1xuXG4gICAgaWYgKHRoaXMuc3RvcEFuaW1hdGlvbigpKSB7XG4gICAgICB0aGlzLnNldEFsaWVuRHJvcHNoaXBUb0RlcGxveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFzc2V0VGltZXIuZWxhcHNlZCA+IDc1KSB7XG4gICAgICB0aGlzLmN1cnJlbnRBbGllbiA9IHRoaXMuaW1hZ2VzW3RoaXMuYW5pbWF0aW9uQ291bnRlcisrICUgdGhpcy5pbWFnZXMubGVuZ3RoXTtcbiAgICAgIHRoaXMuYXNzZXRUaW1lci5zdGFydCA9IG5vdztcblxuICAgICAgaWYgKHRoaXMuYWxsTW92ZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5jYW5MYW5kQWxpZW5zKCkpIHtcbiAgICAgICAgdGhpcy5uZXh0TW92ZSA9IHRoaXMuYWxsTW92ZXMuc2hpZnQoKTtcbiAgICAgICAgdGhpcy5tb3ZlKHRoaXMubmV4dE1vdmUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFsbE1vdmVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5jYW5MYW5kQWxpZW5zKCkpIHtcbiAgICAgICAgdGhpcy5hdExhbmRpbmdCYXNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xlYXZpbmdCYXNlICYmICF0aGlzLmdhbWVTZXJ2aWNlLnZhbGlkKHRoaXMubmV4dE1vdmUpKSB7XG4gICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbE1vdmVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmNhbkxhbmRBbGllbnMoKSAmJiB0aGlzLnRyYWN0b3JCZWFtVGltZXIuZWxhcHNlZCA+IDE1KSB7XG4gICAgICB0aGlzLnRyYWN0b3JCZWFtSW1hZ2UgPSB0aGlzLnRyYWN0b3JCZWFtSW1hZ2VzW1xuICAgICAgICB0aGlzLnRyYWN0b3JCZWFtQW5pbWF0aW9uQ291bnRlcisrICUgdGhpcy50cmFjdG9yQmVhbUltYWdlcy5sZW5ndGhcbiAgICAgIF07XG4gICAgICB0aGlzLnRyYWN0b3JCZWFtVGltZXIuc3RhcnQgPSBub3c7XG4gICAgICB0aGlzLmRyYXdUcmFjdG9yQmVhbSgpO1xuICAgIH1cbiAgICB0aGlzLmRyYXcoKTtcbiAgfVxufVxuIl19