bp-prism-game
Version:
The BP Prism Game
86 lines • 11.3 kB
JavaScript
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=