UNPKG

bp-space-invaders

Version:
107 lines 19.1 kB
import { AssetAlignEnum } from './enum/asset-align.enum'; import { AssetAlignVerticalEnum } from './enum/asset-align-vertical.enum'; import { ObservableTypeEnum } from '../enum/observable-type.enum'; export class AssetClass { constructor(gameService, ctx, boundarySetup, uid) { this.gameService = gameService; this.ctx = ctx; this.boundarySetup = boundarySetup; this.uid = uid; this.x = 0; this.y = 0; this.isAnimateOnce = false; this.isDestroyed = false; this.isGameOver = false; this.isGamePaused = false; this.spawn(); this.boundary = this.gameService.getBoundary(boundarySetup); this.init(); } init() { this.gameService.getMasterObservable().subscribe((result) => { if (result.type === ObservableTypeEnum.keyDownEvent || result.type === ObservableTypeEnum.keyUpEvent) { this.processKeyStroke(result); } else if (result.type === ObservableTypeEnum.gameOver) { this.isGameOver = result.booleanData; } else if (result.type === ObservableTypeEnum.gamePaused) { this.isGamePaused = result.booleanData; } }); } getAssetHeight() { return this.shape.length; } getAssetWidth() { return this.shape[0].length; } positionAsset(alignPosition, justifyPosition) { let x = 0; let y = 0; if (alignPosition === AssetAlignEnum.center) { x = (this.boundary.right - this.getAssetWidth()) / 2; } else if (alignPosition === AssetAlignEnum.leftThird) { x = this.boundary.right / 3 - this.getAssetWidth() / 2; } else if (alignPosition === AssetAlignEnum.leftFourth) { x = this.boundary.right / 4 - this.getAssetWidth() / 2; } else if (alignPosition === AssetAlignEnum.rightThird) { x = (this.boundary.right * 2) / 3 - this.getAssetWidth() / 2; } else if (alignPosition === AssetAlignEnum.rightFourth) { x = (this.boundary.right * 3) / 4 - this.getAssetWidth() / 2; } else if (alignPosition === AssetAlignEnum.right) { x = this.boundary.right - this.getAssetWidth(); } if (justifyPosition === AssetAlignVerticalEnum.bottom) { y = this.boundary.floor - this.getAssetHeight(); } else if (justifyPosition === AssetAlignVerticalEnum.middle) { y = (this.boundary.floor - this.getAssetHeight()) / 2; } return { x: Math.round(x), y: Math.round(y) }; } processKeyStroke(event) { } spawn() { if (!(this.assetAnimation && this.assetAnimation.length > 0)) { throw new Error('You must have an asset array.'); } if (!this.engineAnimation) { throw new Error('You must have an engine array.'); } this.engineXOffset = 0; this.engineYOffset = this.assetAnimation.length; this.assetTimer = { start: 0, elapsed: 0 }; this.destructionTimer = { start: 0, elapsed: 0 }; this.engineTimer = { start: 0, elapsed: 0 }; this.animationCounter = 0; this.engineAnimationCounter = 0; this.destructionAnimationCounter = 0; this.assetTimer.start = performance.now(); this.destructionTimer.start = performance.now(); this.engineTimer.start = performance.now(); this.restore(); } restore() { this.shape = JSON.parse(JSON.stringify(this.assetAnimation.concat(JSON.parse(JSON.stringify(this.engineAnimation))))); } move(asset) { this.x = Math.round(asset.x); this.y = Math.round(asset.y); } stopAnimation() { if (this.isDestroyed || this.isGameOver || this.isGamePaused || this.isAnimateOnce) { cancelAnimationFrame(this.requestId); return true; } return false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGFjZS1pbnZhZGVycy9zcmMvbGliL2Fzc2V0L2Fzc2V0LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVFsRSxNQUFNLE9BQWdCLFVBQVU7SUF3RzlCLFlBQ1ksV0FBd0IsRUFDeEIsR0FBNkIsRUFDN0IsYUFBaUMsRUFDakMsR0FBVztRQUhYLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQUNqQyxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBRXJCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFLRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXVC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LEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBS0QsT0FBTztRQUVMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FFckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM3RixDQUFDO0lBQ0osQ0FBQztJQU1ELElBQUksQ0FBQyxLQUFhO1FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBS1MsYUFBYTtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEYsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElBc3NldCB9IGZyb20gJy4uL2ludGVyZmFjZS9hc3NldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR2FtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2dhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldEFsaWduRW51bSB9IGZyb20gJy4vZW51bS9hc3NldC1hbGlnbi5lbnVtJztcbmltcG9ydCB7IEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0gfSBmcm9tICcuL2VudW0vYXNzZXQtYWxpZ24tdmVydGljYWwuZW51bSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9vYnNlcnZhYmxlLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGVUeXBlRW51bSB9IGZyb20gJy4uL2VudW0vb2JzZXJ2YWJsZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgVGltZXJNb2RlbCB9IGZyb20gJy4uL21vZGVsL3RpbWVyLm1vZGVsJztcbmltcG9ydCB7IEJvdW5kYXJ5TW9kZWwgfSBmcm9tICcuLi9tb2RlbC9ib3VuZGFyeS5tb2RlbCc7XG5pbXBvcnQgeyBCb3VuZGFyeVNldHVwTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9ib3VuZGFyeS1zZXQubW9kZWwnO1xuXG4vKipcbiAqIFRoZSBBc3NldCBDbGFzc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXNzZXRDbGFzcyBpbXBsZW1lbnRzIElBc3NldCB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcGUgZm9yIGRldGVybWluaW5nIHRoZSBib3VuZGFyaWVzXG4gICAqL1xuICBwdWJsaWMgc2hhcGU6IG51bWJlcltdW107XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlXG4gICAqL1xuICBwdWJsaWMgeDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHkgY29vcmRpbmF0ZVxuICAgKi9cbiAgcHVibGljIHk6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRlIG9uY2VcbiAgICovXG4gIHB1YmxpYyBpc0FuaW1hdGVPbmNlOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFzc2V0IHRvIGFuaW1hdGVcbiAgICovXG4gIHByb3RlY3RlZCBhc3NldEFuaW1hdGlvbjogbnVtYmVyW11bXTtcbiAgLyoqXG4gICAqIFRoZSBkZXN0cnVjdGlvbiB0byBhbmltYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVzdHJ1Y3Rpb25BbmltYXRpb246IG51bWJlcltdW107XG4gIC8qKlxuICAgKiBUaGUgZW5naW5lIGFuaW1hdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGVuZ2luZUFuaW1hdGlvbjogbnVtYmVyW11bXTtcbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGlkIGZyb20gdGhlIGFuaW1hdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHJlcXVlc3RJZDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGRlc3Ryb3kgcmVxdWVzdCBpZCBmcm9tIHRoZSBhbmltYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCBkZXN0cnVjdGlvblJlcXVlc3RJZDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEFzc2V0IFRpbW1lclxuICAgKi9cbiAgcHJvdGVjdGVkIGFzc2V0VGltZXI6IFRpbWVyTW9kZWw7XG4gIC8qKlxuICAgKiBUaGUgRGVzdHJ1Y3Rpb24gVGltbWVyXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVzdHJ1Y3Rpb25UaW1lcjogVGltZXJNb2RlbDtcbiAgLyoqXG4gICAqIGVuZ2luZSBUaW1lclxuICAgKi9cbiAgcHJvdGVjdGVkIGVuZ2luZVRpbWVyOiBUaW1lck1vZGVsO1xuICAvKipcbiAgICogVGhlIGVuZ2luZSBYIG9mZnNldFxuICAgKi9cbiAgcHJvdGVjdGVkIGVuZ2luZVhPZmZzZXQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgWSBvZmZzZXRcbiAgICovXG4gIHByb3RlY3RlZCBlbmdpbmVZT2Zmc2V0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbmltYXRpb24gQ291bnRlclxuICAgKi9cbiAgcHJvdGVjdGVkIGFuaW1hdGlvbkNvdW50ZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIERlc3RydWN0aW9uIENvdW50ZXJcbiAgICovXG4gIHByb3RlY3RlZCBkZXN0cnVjdGlvbkFuaW1hdGlvbkNvdW50ZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVuZ2luZSBBbmltYXRpb24gQ291bnRlclxuICAgKi9cbiAgcHJvdGVjdGVkIGVuZ2luZUFuaW1hdGlvbkNvdW50ZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIHRoZSBib2FyZGFyeSBtb2RlbFxuICAgKi9cbiAgcHJvdGVjdGVkIGJvdW5kYXJ5OiBCb3VuZGFyeU1vZGVsO1xuICAvKipcbiAgICogSXMgdGhlIGFzc2V0IGlzIGRlc3Ryb3llZFxuICAgKi9cbiAgcHVibGljIGlzRGVzdHJveWVkOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhlIGFzc2V0IGtub3ducyB0aGUgZ2FtZSBpcyBvdmVyXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNHYW1lT3ZlcjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoZSBhc3NldCBrbm93bnMgdGhlIGdhbWUgaXMgcGF1c2VkXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNHYW1lUGF1c2VkOiBib29sZWFuO1xuICAvKipcbiAgICogQXNzZXQgQW5pbWF0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzc2V0QW5pbWF0aW9uczogbnVtYmVyW11bXVtdO1xuICAvKipcbiAgICogRW5naW5lIEFuaW1hdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBlbmdpbmVBbmltYXRpb25zOiBudW1iZXJbXVtdW107XG4gIC8qKlxuICAgKiBEZXN0cnVjdGlvbiBBbmltYXRpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVzdHJ1Y3Rpb25BbmltYXRpb25zOiBudW1iZXJbXVtdW107XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjdHggVGhlIGN0eFxuICAgKiBAcGFyYW0geCBpbml0aWFsIHggcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB5IGluaXRpYWwgeSBwYXJhbWV0ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBnYW1lU2VydmljZTogR2FtZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHByb3RlY3RlZCBib3VuZGFyeVNldHVwOiBCb3VuZGFyeVNldHVwTW9kZWwsXG4gICAgcHJvdGVjdGVkIHVpZDogbnVtYmVyXG4gICkge1xuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbiAgICB0aGlzLmlzQW5pbWF0ZU9uY2UgPSBmYWxzZTtcblxuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzR2FtZU92ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmlzR2FtZVBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5zcGF3bigpO1xuXG4gICAgdGhpcy5ib3VuZGFyeSA9IHRoaXMuZ2FtZVNlcnZpY2UuZ2V0Qm91bmRhcnkoYm91bmRhcnlTZXR1cCk7XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHRoZSBhc3NldFxuICAgKi9cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdhbWVTZXJ2aWNlLmdldE1hc3Rlck9ic2VydmFibGUoKS5zdWJzY3JpYmUoKHJlc3VsdDogT2JzZXJ2YWJsZU1vZGVsKSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnR5cGUgPT09IE9ic2VydmFibGVUeXBlRW51bS5rZXlEb3duRXZlbnQgfHwgcmVzdWx0LnR5cGUgPT09IE9ic2VydmFibGVUeXBlRW51bS5rZXlVcEV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0tleVN0cm9rZShyZXN1bHQpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQudHlwZSA9PT0gT2JzZXJ2YWJsZVR5cGVFbnVtLmdhbWVPdmVyKSB7XG4gICAgICAgIHRoaXMuaXNHYW1lT3ZlciA9IHJlc3VsdC5ib29sZWFuRGF0YTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnR5cGUgPT09IE9ic2VydmFibGVUeXBlRW51bS5nYW1lUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuaXNHYW1lUGF1c2VkID0gcmVzdWx0LmJvb2xlYW5EYXRhO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQXNzZXQgaGVpZ2h0XG4gICAqL1xuICBnZXRBc3NldEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNoYXBlLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEFzc2V0IFdpZHRoXG4gICAqL1xuICBnZXRBc3NldFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hhcGVbMF0ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIHRoZSBBc3NldFxuICAgKi9cbiAgcG9zaXRpb25Bc3NldChhbGlnblBvc2l0aW9uOiBBc3NldEFsaWduRW51bSwganVzdGlmeVBvc2l0aW9uOiBBc3NldEFsaWduVmVydGljYWxFbnVtKTogSUFzc2V0IHtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuXG4gICAgaWYgKGFsaWduUG9zaXRpb24gPT09IEFzc2V0QWxpZ25FbnVtLmNlbnRlcikge1xuICAgICAgeCA9ICh0aGlzLmJvdW5kYXJ5LnJpZ2h0IC0gdGhpcy5nZXRBc3NldFdpZHRoKCkpIC8gMjtcbiAgICB9IGVsc2UgaWYgKGFsaWduUG9zaXRpb24gPT09IEFzc2V0QWxpZ25FbnVtLmxlZnRUaGlyZCkge1xuICAgICAgeCA9IHRoaXMuYm91bmRhcnkucmlnaHQgLyAzIC0gdGhpcy5nZXRBc3NldFdpZHRoKCkgLyAyO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25Qb3NpdGlvbiA9PT0gQXNzZXRBbGlnbkVudW0ubGVmdEZvdXJ0aCkge1xuICAgICAgeCA9IHRoaXMuYm91bmRhcnkucmlnaHQgLyA0IC0gdGhpcy5nZXRBc3NldFdpZHRoKCkgLyAyO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25Qb3NpdGlvbiA9PT0gQXNzZXRBbGlnbkVudW0ucmlnaHRUaGlyZCkge1xuICAgICAgeCA9ICh0aGlzLmJvdW5kYXJ5LnJpZ2h0ICogMikgLyAzIC0gdGhpcy5nZXRBc3NldFdpZHRoKCkgLyAyO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25Qb3NpdGlvbiA9PT0gQXNzZXRBbGlnbkVudW0ucmlnaHRGb3VydGgpIHtcbiAgICAgIHggPSAodGhpcy5ib3VuZGFyeS5yaWdodCAqIDMpIC8gNCAtIHRoaXMuZ2V0QXNzZXRXaWR0aCgpIC8gMjtcbiAgICB9IGVsc2UgaWYgKGFsaWduUG9zaXRpb24gPT09IEFzc2V0QWxpZ25FbnVtLnJpZ2h0KSB7XG4gICAgICB4ID0gdGhpcy5ib3VuZGFyeS5yaWdodCAtIHRoaXMuZ2V0QXNzZXRXaWR0aCgpO1xuICAgIH1cblxuICAgIGlmIChqdXN0aWZ5UG9zaXRpb24gPT09IEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0uYm90dG9tKSB7XG4gICAgICB5ID0gdGhpcy5ib3VuZGFyeS5mbG9vciAtIHRoaXMuZ2V0QXNzZXRIZWlnaHQoKTtcbiAgICB9IGVsc2UgaWYgKGp1c3RpZnlQb3NpdGlvbiA9PT0gQXNzZXRBbGlnblZlcnRpY2FsRW51bS5taWRkbGUpIHtcbiAgICAgIHkgPSAodGhpcy5ib3VuZGFyeS5mbG9vciAtIHRoaXMuZ2V0QXNzZXRIZWlnaHQoKSkgLyAyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLnJvdW5kKHgpLFxuICAgICAgeTogTWF0aC5yb3VuZCh5KVxuICAgIH0gYXMgSUFzc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGtleSBzdHJva2VcbiAgICogQHBhcmFtIGV2ZW50Q29kZSB0aGUga2V5IGV2ZW50IGNvZGVcbiAgICovXG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICBwcm90ZWN0ZWQgcHJvY2Vzc0tleVN0cm9rZShldmVudDogT2JzZXJ2YWJsZU1vZGVsKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBTcGF3biB0aGUgYXNzZXRcbiAgICovXG4gIHByb3RlY3RlZCBzcGF3bigpOiB2b2lkIHtcbiAgICBpZiAoISh0aGlzLmFzc2V0QW5pbWF0aW9uICYmIHRoaXMuYXNzZXRBbmltYXRpb24ubGVuZ3RoID4gMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaGF2ZSBhbiBhc3NldCBhcnJheS4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZW5naW5lQW5pbWF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGhhdmUgYW4gZW5naW5lIGFycmF5LicpO1xuICAgIH1cblxuICAgIHRoaXMuZW5naW5lWE9mZnNldCA9IDA7XG4gICAgdGhpcy5lbmdpbmVZT2Zmc2V0ID0gdGhpcy5hc3NldEFuaW1hdGlvbi5sZW5ndGg7XG4gICAgdGhpcy5hc3NldFRpbWVyID0geyBzdGFydDogMCwgZWxhcHNlZDogMCB9O1xuICAgIHRoaXMuZGVzdHJ1Y3Rpb25UaW1lciA9IHsgc3RhcnQ6IDAsIGVsYXBzZWQ6IDAgfTtcbiAgICB0aGlzLmVuZ2luZVRpbWVyID0geyBzdGFydDogMCwgZWxhcHNlZDogMCB9O1xuICAgIHRoaXMuYW5pbWF0aW9uQ291bnRlciA9IDA7XG4gICAgdGhpcy5lbmdpbmVBbmltYXRpb25Db3VudGVyID0gMDtcbiAgICB0aGlzLmRlc3RydWN0aW9uQW5pbWF0aW9uQ291bnRlciA9IDA7XG5cbiAgICB0aGlzLmFzc2V0VGltZXIuc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB0aGlzLmVuZ2luZVRpbWVyLnN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZVxuICAgKi9cbiAgcmVzdG9yZSgpOiB2b2lkIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICB0aGlzLnNoYXBlID0gSlNPTi5wYXJzZShcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5hc3NldEFuaW1hdGlvbi5jb25jYXQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmVuZ2luZUFuaW1hdGlvbikpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGFzc2V0XG4gICAqIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgaW5wdXRcbiAgICovXG4gIG1vdmUoYXNzZXQ6IElBc3NldCk6IHZvaWQge1xuICAgIHRoaXMueCA9IE1hdGgucm91bmQoYXNzZXQueCk7XG4gICAgdGhpcy55ID0gTWF0aC5yb3VuZChhc3NldC55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHN0b3AgdGhlIGFuaW1hdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BBbmltYXRpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQgfHwgdGhpcy5pc0dhbWVPdmVyIHx8IHRoaXMuaXNHYW1lUGF1c2VkIHx8IHRoaXMuaXNBbmltYXRlT25jZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=