UNPKG

bp-prism-game

Version:
100 lines 14.9 kB
import { AssetClass } from '../../asset/asset.class'; import { BLOCK_SIZE } from '../../gameboard/gameboard-constants'; import { AssetDirectionEnum } from '../../enum/asset-direction.enum'; import { ObservableTypeEnum } from '../../enum/observable-type.enum'; /** * The Alien Class */ export class AlienClass extends AssetClass { /** * Constructor * @param gameService The GameService * @param ctx The ctx * @param guid The guid of the alien */ constructor(gameService, ctx, guid) { super(gameService, ctx, guid); this.alienAssetTimer = { start: performance.now(), elapsed: 0 }; this.alienSpeed = 500; this.originamAlienSpeed = this.alienSpeed; this.currentAlienDirection = AssetDirectionEnum.west; this.eastAlienImages = []; this.westAlienImages = []; this.northAlienImages = []; this.gameService.getMasterObservable().subscribe((event) => { if (event.type === ObservableTypeEnum.prismBlastLaunched && event.booleanData) { this.alienSpeed = 2000; } else if (event.type === ObservableTypeEnum.prismBlastDefused && event.booleanData) { this.alienSpeed = this.originamAlienSpeed; } }); } /** * Determine the path of the creep * * @param moves All the moves of the creep */ setCreepPath(moves) { this.allMoves = moves; this.nextMove = this.allMoves[0]; this.move(this.allMoves[0]); } /** * Set the creep speed * @param speed The speed to set */ setCreepSpeed(speed) { this.alienSpeed = speed; } /** * Draw the alien */ draw() { if (this.isImageLoaded) { this.ctx.save(); this.ctx.translate(this.x + BLOCK_SIZE / 2, this.y + BLOCK_SIZE / 2); this.ctx.scale(this.assetScale.x, this.assetScale.y); this.ctx.drawImage(this.currentAlien.imageSource, this.currentAlien.x, this.currentAlien.y); this.ctx.restore(); } } /** * Animate the alien * @param now the current time */ animate(now = 0) { this.assetTimer.elapsed = now - this.assetTimer.start; this.alienAssetTimer.elapsed = now - this.alienAssetTimer.start; if (this.stopAnimation()) { return; } if (this.assetTimer.elapsed > Math.floor(this.alienSpeed / 2)) { this.assetTimer.start = now; this.nextMove = this.allMoves.shift(); this.move(this.nextMove); if (this.nextMove.rotate === 90 && this.currentAlienDirection !== AssetDirectionEnum.east) { this.currentAlienDirection = AssetDirectionEnum.east; this.images = this.eastAlienImages; } else if (this.nextMove.rotate === -90 && this.currentAlienDirection !== AssetDirectionEnum.west) { this.currentAlienDirection = AssetDirectionEnum.west; this.images = this.westAlienImages; } else if (this.nextMove.rotate === 0 && this.currentAlienDirection !== AssetDirectionEnum.north) { this.currentAlienDirection = AssetDirectionEnum.north; this.images = this.northAlienImages; } if (this.gameService.isBaseDestroy(this)) { this.isDestroyed = true; return; } } if (this.alienAssetTimer.elapsed > Math.floor(this.alienSpeed / 4)) { this.alienAssetTimer.start = now; this.currentAlien = this.images[this.animationCounter++ % this.images.length]; } this.draw(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZW4uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmlzbS9zcmMvbGliL2FsaWVucy9hbGllbi9hbGllbi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixVQUFXLFNBQVEsVUFBVTtJQWdEakQ7Ozs7O09BS0c7SUFDSCxZQUFZLFdBQXdCLEVBQUUsR0FBNkIsRUFBRSxJQUFZO1FBQy9FLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXNCLEVBQUUsRUFBRTtZQUMxRSxJQUFJ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RUFBRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzthQUNwQztpQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssa0JBQWtCLENBQUMsS0FBSyxFQUFFO2dCQUNoRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUNyQztZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixPQUFPO2FBQ1I7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElBc3NldCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9hc3NldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR2FtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2dhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldENsYXNzIH0gZnJvbSAnLi4vLi4vYXNzZXQvYXNzZXQuY2xhc3MnO1xuaW1wb3J0IHsgSW1hZ2VMb2NhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvaW1hZ2UvaW1hZ2UtbG9jYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgVGltZXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL3RpbWVyLm1vZGVsJztcbmltcG9ydCB7IEJMT0NLX1NJWkUgfSBmcm9tICcuLi8uLi9nYW1lYm9hcmQvZ2FtZWJvYXJkLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBc3NldERpcmVjdGlvbkVudW0gfSBmcm9tICcuLi8uLi9lbnVtL2Fzc2V0LWRpcmVjdGlvbi5lbnVtJztcbmltcG9ydCB7IE9ic2VydmFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL29ic2VydmFibGUubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9vYnNlcnZhYmxlLXR5cGUuZW51bSc7XG5cbi8qKlxuICogVGhlIEFsaWVuIENsYXNzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBbGllbkNsYXNzIGV4dGVuZHMgQXNzZXRDbGFzcyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpZW4gbW92ZXMgZm9yIGRlYnVnXG4gICAqL1xuICBwcm90ZWN0ZWQgbmV4dE1vdmU6IElBc3NldDtcbiAgLyoqXG4gICAqIFRoZSBhbGllbiBtb3ZlcyBmb3IgZGVidWdcbiAgICovXG4gIHByb3RlY3RlZCBhbGxNb3ZlczogSUFzc2V0W107XG4gIC8qKlxuICAgKiBUaGUgYWxpZW4gc3BlZWQgbnVtYmVyXG4gICAqL1xuICBwcml2YXRlIGFsaWVuU3BlZWQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGFsaWVuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3VycmVudEFsaWVuOiBJbWFnZUxvY2F0aW9uTW9kZWw7XG5cbiAgLyoqXG4gICAqIEFsbCB0aGUgRWFzdCBmYWNpbmcgYWxpZW5zXG4gICAqL1xuICBwcm90ZWN0ZWQgZWFzdEFsaWVuSW1hZ2VzOiBJbWFnZUxvY2F0aW9uTW9kZWxbXTtcblxuICAvKipcbiAgICogQWxsIHRoZSBXZXN0IGZhY2luZyBhbGllbnNcbiAgICovXG4gIHByb3RlY3RlZCB3ZXN0QWxpZW5JbWFnZXM6IEltYWdlTG9jYXRpb25Nb2RlbFtdO1xuXG4gIC8qKlxuICAgKiBBbGwgdGhlIE5vcnRoIGZhY2luZyBhbGllbnNcbiAgICovXG4gIHByb3RlY3RlZCBub3J0aEFsaWVuSW1hZ2VzOiBJbWFnZUxvY2F0aW9uTW9kZWxbXTtcblxuICAvKipcbiAgICogVGhlIEFzc2V0IFRpbW1lclxuICAgKi9cbiAgcHJpdmF0ZSBhbGllbkFzc2V0VGltZXI6IFRpbWVyTW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBDdXJyZW50IEFsaWVuIERpcmVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjdXJyZW50QWxpZW5EaXJlY3Rpb246IEFzc2V0RGlyZWN0aW9uRW51bTtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGFsaWVuIHNwZWVkXG4gICAqL1xuICBwcml2YXRlIG9yaWdpbmFtQWxpZW5TcGVlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gZ2FtZVNlcnZpY2UgVGhlIEdhbWVTZXJ2aWNlXG4gICAqIEBwYXJhbSBjdHggVGhlIGN0eFxuICAgKiBAcGFyYW0gZ3VpZCBUaGUgZ3VpZCBvZiB0aGUgYWxpZW5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGd1aWQ6IG51bWJlcikge1xuICAgIHN1cGVyKGdhbWVTZXJ2aWNlLCBjdHgsIGd1aWQpO1xuICAgIHRoaXMuYWxpZW5Bc3NldFRpbWVyID0geyBzdGFydDogcGVyZm9ybWFuY2Uubm93KCksIGVsYXBzZWQ6IDAgfTtcbiAgICB0aGlzLmFsaWVuU3BlZWQgPSA1MDA7XG4gICAgdGhpcy5vcmlnaW5hbUFsaWVuU3BlZWQgPSB0aGlzLmFsaWVuU3BlZWQ7XG4gICAgdGhpcy5jdXJyZW50QWxpZW5EaXJlY3Rpb24gPSBBc3NldERpcmVjdGlvbkVudW0ud2VzdDtcbiAgICB0aGlzLmVhc3RBbGllbkltYWdlcyA9IFtdO1xuICAgIHRoaXMud2VzdEFsaWVuSW1hZ2VzID0gW107XG4gICAgdGhpcy5ub3J0aEFsaWVuSW1hZ2VzID0gW107XG5cbiAgICB0aGlzLmdhbWVTZXJ2aWNlLmdldE1hc3Rlck9ic2VydmFibGUoKS5zdWJzY3JpYmUoKGV2ZW50OiBPYnNlcnZhYmxlTW9kZWwpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSBPYnNlcnZhYmxlVHlwZUVudW0ucHJpc21CbGFzdExhdW5jaGVkICYmIGV2ZW50LmJvb2xlYW5EYXRhKSB7XG4gICAgICAgIHRoaXMuYWxpZW5TcGVlZCA9IDIwMDA7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09IE9ic2VydmFibGVUeXBlRW51bS5wcmlzbUJsYXN0RGVmdXNlZCAmJiBldmVudC5ib29sZWFuRGF0YSkge1xuICAgICAgICB0aGlzLmFsaWVuU3BlZWQgPSB0aGlzLm9yaWdpbmFtQWxpZW5TcGVlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHBhdGggb2YgdGhlIGNyZWVwXG4gICAqXG4gICAqIEBwYXJhbSBtb3ZlcyBBbGwgdGhlIG1vdmVzIG9mIHRoZSBjcmVlcFxuICAgKi9cbiAgcHVibGljIHNldENyZWVwUGF0aChtb3ZlczogSUFzc2V0W10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbE1vdmVzID0gbW92ZXM7XG4gICAgdGhpcy5uZXh0TW92ZSA9IHRoaXMuYWxsTW92ZXNbMF07XG4gICAgdGhpcy5tb3ZlKHRoaXMuYWxsTW92ZXNbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3JlZXAgc3BlZWRcbiAgICogQHBhcmFtIHNwZWVkIFRoZSBzcGVlZCB0byBzZXRcbiAgICovXG4gIHB1YmxpYyBzZXRDcmVlcFNwZWVkKHNwZWVkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmFsaWVuU3BlZWQgPSBzcGVlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoZSBhbGllblxuICAgKi9cbiAgcHJvdGVjdGVkIGRyYXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbWFnZUxvYWRlZCkge1xuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKHRoaXMueCArIEJMT0NLX1NJWkUgLyAyLCB0aGlzLnkgKyBCTE9DS19TSVpFIC8gMik7XG4gICAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLmFzc2V0U2NhbGUueCwgdGhpcy5hc3NldFNjYWxlLnkpO1xuICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMuY3VycmVudEFsaWVuLmltYWdlU291cmNlLCB0aGlzLmN1cnJlbnRBbGllbi54LCB0aGlzLmN1cnJlbnRBbGllbi55KTtcbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZSB0aGUgYWxpZW5cbiAgICogQHBhcmFtIG5vdyB0aGUgY3VycmVudCB0aW1lXG4gICAqL1xuICBwdWJsaWMgYW5pbWF0ZShub3cgPSAwKTogdm9pZCB7XG4gICAgdGhpcy5hc3NldFRpbWVyLmVsYXBzZWQgPSBub3cgLSB0aGlzLmFzc2V0VGltZXIuc3RhcnQ7XG4gICAgdGhpcy5hbGllbkFzc2V0VGltZXIuZWxhcHNlZCA9IG5vdyAtIHRoaXMuYWxpZW5Bc3NldFRpbWVyLnN0YXJ0O1xuXG4gICAgaWYgKHRoaXMuc3RvcEFuaW1hdGlvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXNzZXRUaW1lci5lbGFwc2VkID4gTWF0aC5mbG9vcih0aGlzLmFsaWVuU3BlZWQgLyAyKSkge1xuICAgICAgdGhpcy5hc3NldFRpbWVyLnN0YXJ0ID0gbm93O1xuICAgICAgdGhpcy5uZXh0TW92ZSA9IHRoaXMuYWxsTW92ZXMuc2hpZnQoKTtcbiAgICAgIHRoaXMubW92ZSh0aGlzLm5leHRNb3ZlKTtcblxuICAgICAgaWYgKHRoaXMubmV4dE1vdmUucm90YXRlID09PSA5MCAmJiB0aGlzLmN1cnJlbnRBbGllbkRpcmVjdGlvbiAhPT0gQXNzZXREaXJlY3Rpb25FbnVtLmVhc3QpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QWxpZW5EaXJlY3Rpb24gPSBBc3NldERpcmVjdGlvbkVudW0uZWFzdDtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB0aGlzLmVhc3RBbGllbkltYWdlcztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW92ZS5yb3RhdGUgPT09IC05MCAmJiB0aGlzLmN1cnJlbnRBbGllbkRpcmVjdGlvbiAhPT0gQXNzZXREaXJlY3Rpb25FbnVtLndlc3QpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QWxpZW5EaXJlY3Rpb24gPSBBc3NldERpcmVjdGlvbkVudW0ud2VzdDtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB0aGlzLndlc3RBbGllbkltYWdlcztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW92ZS5yb3RhdGUgPT09IDAgJiYgdGhpcy5jdXJyZW50QWxpZW5EaXJlY3Rpb24gIT09IEFzc2V0RGlyZWN0aW9uRW51bS5ub3J0aCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRBbGllbkRpcmVjdGlvbiA9IEFzc2V0RGlyZWN0aW9uRW51bS5ub3J0aDtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB0aGlzLm5vcnRoQWxpZW5JbWFnZXM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdhbWVTZXJ2aWNlLmlzQmFzZURlc3Ryb3kodGhpcykpIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGllbkFzc2V0VGltZXIuZWxhcHNlZCA+IE1hdGguZmxvb3IodGhpcy5hbGllblNwZWVkIC8gNCkpIHtcbiAgICAgIHRoaXMuYWxpZW5Bc3NldFRpbWVyLnN0YXJ0ID0gbm93O1xuICAgICAgdGhpcy5jdXJyZW50QWxpZW4gPSB0aGlzLmltYWdlc1t0aGlzLmFuaW1hdGlvbkNvdW50ZXIrKyAlIHRoaXMuaW1hZ2VzLmxlbmd0aF07XG4gICAgfVxuXG4gICAgdGhpcy5kcmF3KCk7XG4gIH1cbn1cbiJdfQ==