UNPKG

bp-prism-game

Version:
86 lines 11.3 kB
import { GunnerClass } from '../gunner.class'; import { ObservableTypeEnum } from '../../enum/observable-type.enum'; import { KEY } from '../../gameboard/gameboard-constants'; import { ImageLoadedEnum } from '../../enum/image-loaded.enum'; /** * The Main Gunner Class */ export class MainGunnerClass extends GunnerClass { /** * Constructor * @param gameService The GameService * @param ctx The ctx * @param guid The guid of the alien */ constructor(gameService, ctx, guid) { super(gameService, ctx, guid); /** * moves */ this.moves = { [KEY.LEFT]: true, [KEY.RIGHT]: true, [KEY.SPACE]: true }; this.loadGunnerImages(); this.missilesFiring = false; this.assetScale = { x: 0.2, y: 0.2 }; this.rotationDegree = 0; } /** * Load the Gunner Images */ loadGunnerImages() { const imagesToLoad = [ImageLoadedEnum.mainGunnerSupport, ImageLoadedEnum.mainGunner]; imagesToLoad.map((key) => { this.images.push(this.gameService.getImage(key)); this.isImageLoaded = true; }); this.setAssetDimensions(this.images[0].height, this.images[0].width); } /** * Press Key Stroke * @param event The Key event */ processKeyStroke(event) { const eventCode = event.stringData; const keyDown = event.type === ObservableTypeEnum.keyDownEvent; if (this.moves[eventCode]) { if (eventCode === KEY.SPACE && keyDown && !this.missilesFiring) { this.missilesFiring = true; this.missileFired = true; this.spaceKeyDownInterval = setInterval(() => { this.missileFired = true; }, 500); } else if (eventCode === KEY.SPACE && !keyDown) { this.missilesFiring = false; clearInterval(this.spaceKeyDownInterval); } else if (eventCode !== KEY.SPACE) { const rotation = 5.625; if ((keyDown && this.currentKeyDown !== eventCode) || (!keyDown && this.currentKeyDown === eventCode)) { clearInterval(this.keyDownInterval); clearTimeout(this.keyDownTimeout); this.keyDownInterval = undefined; this.currentKeyDown = undefined; } if (keyDown && this.currentKeyDown !== eventCode) { this.currentKeyDown = eventCode; this.keyDownTimeout = setTimeout(() => { this.keyDownInterval = setInterval(() => { this.setRotation(rotation, eventCode === KEY.RIGHT); }, 50); }, 250); } if (keyDown) { this.setRotation(rotation, eventCode === KEY.RIGHT); } } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1ndW5uZXIuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmlzbS9zcmMvbGliL2d1bm5lci9tYWluLWd1bm5lci9tYWluLWd1bm5lci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFdBQVc7SUFtQzlDOzs7OztPQUtHO0lBQ0gsWUFBWSxXQUF3QixFQUFFLEdBQTZCLEVBQUUsSUFBWTtRQUMvRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQWhCaEM7O1dBRUc7UUFDSyxVQUFLLEdBQUc7WUFDZCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJO1lBQ2hCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUk7WUFDakIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSTtTQUNsQixDQUFDO1FBV0EsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUIsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixDQUFDLEVBQUUsR0FBRztZQUNOLENBQUMsRUFBRSxHQUFHO1NBQ1ksQ0FBQztRQUVyQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0I7UUFDdEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxl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IEdhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9nYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3VubmVyQ2xhc3MgfSBmcm9tICcuLi9ndW5uZXIuY2xhc3MnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvb2JzZXJ2YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlVHlwZUVudW0gfSBmcm9tICcuLi8uLi9lbnVtL29ic2VydmFibGUtdHlwZS5lbnVtJztcbmltcG9ydCB7IEtFWSB9IGZyb20gJy4uLy4uL2dhbWVib2FyZC9nYW1lYm9hcmQtY29uc3RhbnRzJztcbmltcG9ydCB7IEFzc2V0U2NhbGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL2Fzc2V0LXNjYWxlLm1vZGUnO1xuaW1wb3J0IHsgSW1hZ2VMb2FkZWRFbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9pbWFnZS1sb2FkZWQuZW51bSc7XG5cbi8qKlxuICogVGhlIE1haW4gR3VubmVyIENsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBNYWluR3VubmVyQ2xhc3MgZXh0ZW5kcyBHdW5uZXJDbGFzcyB7XG4gIC8qKlxuICAgKiBUaGUgS2V5IERvd24gSW50ZXJ2YWxcbiAgICovXG4gIHByaXZhdGUga2V5RG93bkludGVydmFsOiBOb2RlSlMuVGltZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBTcGFjZSBLZXkgRG93biBJbnRlcnZhbFxuICAgKi9cbiAgcHJpdmF0ZSBzcGFjZUtleURvd25JbnRlcnZhbDogTm9kZUpTLlRpbWVyO1xuXG4gIC8qKlxuICAgKiBUaGUgS2V5IERvd24gVGltZW91dFxuICAgKi9cbiAgcHJpdmF0ZSBrZXlEb3duVGltZW91dDogTm9kZUpTLlRpbWVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBLZXkgZG93blxuICAgKi9cbiAgcHJpdmF0ZSBjdXJyZW50S2V5RG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBLZXkgZG93blxuICAgKi9cbiAgcHJpdmF0ZSBtaXNzaWxlc0ZpcmluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogbW92ZXNcbiAgICovXG4gIHByaXZhdGUgbW92ZXMgPSB7XG4gICAgW0tFWS5MRUZUXTogdHJ1ZSxcbiAgICBbS0VZLlJJR0hUXTogdHJ1ZSxcbiAgICBbS0VZLlNQQUNFXTogdHJ1ZVxuICB9O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gZ2FtZVNlcnZpY2UgVGhlIEdhbWVTZXJ2aWNlXG4gICAqIEBwYXJhbSBjdHggVGhlIGN0eFxuICAgKiBAcGFyYW0gZ3VpZCBUaGUgZ3VpZCBvZiB0aGUgYWxpZW5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGd1aWQ6IG51bWJlcikge1xuICAgIHN1cGVyKGdhbWVTZXJ2aWNlLCBjdHgsIGd1aWQpO1xuXG4gICAgdGhpcy5sb2FkR3VubmVySW1hZ2VzKCk7XG5cbiAgICB0aGlzLm1pc3NpbGVzRmlyaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmFzc2V0U2NhbGUgPSB7XG4gICAgICB4OiAwLjIsXG4gICAgICB5OiAwLjJcbiAgICB9IGFzIEFzc2V0U2NhbGVNb2RlbDtcblxuICAgIHRoaXMucm90YXRpb25EZWdyZWUgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIEd1bm5lciBJbWFnZXNcbiAgICovXG4gIHByaXZhdGUgbG9hZEd1bm5lckltYWdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZXNUb0xvYWQgPSBbSW1hZ2VMb2FkZWRFbnVtLm1haW5HdW5uZXJTdXBwb3J0LCBJbWFnZUxvYWRlZEVudW0ubWFpbkd1bm5lcl07XG5cbiAgICBpbWFnZXNUb0xvYWQubWFwKChrZXk6IEltYWdlTG9hZGVkRW51bSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZXMucHVzaCh0aGlzLmdhbWVTZXJ2aWNlLmdldEltYWdlKGtleSkpO1xuICAgICAgdGhpcy5pc0ltYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0QXNzZXREaW1lbnNpb25zKHRoaXMuaW1hZ2VzWzBdLmhlaWdodCwgdGhpcy5pbWFnZXNbMF0ud2lkdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXNzIEtleSBTdHJva2VcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBLZXkgZXZlbnRcbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5U3Ryb2tlKGV2ZW50OiBPYnNlcnZhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudENvZGUgPSBldmVudC5zdHJpbmdEYXRhO1xuICAgIGNvbnN0IGtleURvd24gPSBldmVudC50eXBlID09PSBPYnNlcnZhYmxlVHlwZUVudW0ua2V5RG93bkV2ZW50O1xuXG4gICAgaWYgKHRoaXMubW92ZXNbZXZlbnRDb2RlXSkge1xuICAgICAgaWYgKGV2ZW50Q29kZSA9PT0gS0VZLlNQQUNFICYmIGtleURvd24gJiYgIXRoaXMubWlzc2lsZXNGaXJpbmcpIHtcbiAgICAgICAgdGhpcy5taXNzaWxlc0ZpcmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubWlzc2lsZUZpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zcGFjZUtleURvd25JbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1pc3NpbGVGaXJlZCA9IHRydWU7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50Q29kZSA9PT0gS0VZLlNQQUNFICYmICFrZXlEb3duKSB7XG4gICAgICAgIHRoaXMubWlzc2lsZXNGaXJpbmcgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnNwYWNlS2V5RG93bkludGVydmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRDb2RlICE9PSBLRVkuU1BBQ0UpIHtcbiAgICAgICAgY29uc3Qgcm90YXRpb24gPSA1LjYyNTtcblxuICAgICAgICBpZiAoKGtleURvd24gJiYgdGhpcy5jdXJyZW50S2V5RG93biAhPT0gZXZlbnRDb2RlKSB8fCAoIWtleURvd24gJiYgdGhpcy5jdXJyZW50S2V5RG93biA9PT0gZXZlbnRDb2RlKSkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5rZXlEb3duSW50ZXJ2YWwpO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmtleURvd25UaW1lb3V0KTtcbiAgICAgICAgICB0aGlzLmtleURvd25JbnRlcnZhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlEb3duID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleURvd24gJiYgdGhpcy5jdXJyZW50S2V5RG93biAhPT0gZXZlbnRDb2RlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50S2V5RG93biA9IGV2ZW50Q29kZTtcblxuICAgICAgICAgIHRoaXMua2V5RG93blRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMua2V5RG93bkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFJvdGF0aW9uKHJvdGF0aW9uLCBldmVudENvZGUgPT09IEtFWS5SSUdIVCk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXlEb3duKSB7XG4gICAgICAgICAgdGhpcy5zZXRSb3RhdGlvbihyb3RhdGlvbiwgZXZlbnRDb2RlID09PSBLRVkuUklHSFQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=