UNPKG

bp-prism-game

Version:
80 lines 9.32 kB
import { AssetClass } from '../asset/asset.class'; import { ObservableTypeEnum } from '../enum/observable-type.enum'; import { BLOCK_SIZE } from '../gameboard/gameboard-constants'; /** * The Main Gunner Class */ export class GunnerClass 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.missileFired = false; this.move(); } /** * Override the move method to center the base */ move() { const position = this.gameService.getGunnerPosition(); this.centerPosition = { x: position.x + BLOCK_SIZE / 2, y: position.y }; this.x = position.x; this.y = position.y; } /** * Set the rotation * @param rotation The rotation in degress * @param isRight If the key is the right key */ setRotation(rotation, isRight) { this.rotationDegree += isRight ? rotation : -1 * rotation; } /** * Set the rotation of the gun to 0; */ resetRotation() { this.rotationDegree = 0; } /** * Draw everything necessary */ draw() { if (this.isImageLoaded) { this.ctx.save(); this.ctx.translate(this.x + BLOCK_SIZE / 2, this.y); this.ctx.scale(this.assetScale.x, this.assetScale.y); this.images.map((imageData) => { if (imageData.isRotate) { this.ctx.rotate(this.gameService.getRadians(this.rotationDegree)); } this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y); }); this.ctx.restore(); } } /** * Animate the base * @param now the current time */ animate(now = 0) { this.assetTimer.elapsed = now - this.assetTimer.start; if (this.assetTimer.elapsed > 500 && this.missileFired) { this.missileFired = false; this.assetTimer.start = now; this.gameService.emitMasterObservableEvent({ type: ObservableTypeEnum.missileLaunched, assetCoordinateData: this.centerPosition, assetRotationData: this.rotationDegree }); } this.draw(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VubmVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpc20vc3JjL2xpYi9ndW5uZXIvZ3VubmVyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHOUQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLFdBQVksU0FBUSxVQUFVO0lBZ0JsRDs7Ozs7T0FLRztJQUNILFlBQVksV0FBd0IsRUFBRSxHQUE2QixFQUFFLElBQVk7UUFDL0UsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNULE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDO1lBQzlCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNKLENBQUM7UUFFWixJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sV0FBVyxDQUFDLFFBQWdCLEVBQUUsT0FBZ0I7UUFDdEQsSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ08sSUFBSTtRQUNaLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRWhCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO29CQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztpQkFDbkU7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUV0RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDO2dCQUN6QyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtnQkFDeEMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ3hDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxjQUFjO2FBQ3BCLENBQUMsQ0FBQztTQUN2QjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9nYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXNzZXRDbGFzcyB9IGZyb20gJy4uL2Fzc2V0L2Fzc2V0LmNsYXNzJztcbmltcG9ydCB7IElBc3NldCB9IGZyb20gJy4uL2ludGVyZmFjZS9hc3NldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vZW51bS9vYnNlcnZhYmxlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9vYnNlcnZhYmxlLm1vZGVsJztcbmltcG9ydCB7IEJMT0NLX1NJWkUgfSBmcm9tICcuLi9nYW1lYm9hcmQvZ2FtZWJvYXJkLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBJbWFnZUxvY2F0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9pbWFnZS9pbWFnZS1sb2NhdGlvbi5tb2RlbCc7XG5cbi8qKlxuICogVGhlIE1haW4gR3VubmVyIENsYXNzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdW5uZXJDbGFzcyBleHRlbmRzIEFzc2V0Q2xhc3Mge1xuICAvKipcbiAgICogUm90YXRpb24gRGVncmVlc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJvdGF0aW9uRGVncmVlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtaXNzaWxlIGhhcyBiZWVuIGZpcmVkXG4gICAqL1xuICBwcm90ZWN0ZWQgbWlzc2lsZUZpcmVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VudGVyIG9mIHRoZSBndW5uZXJcbiAgICovXG4gIHByaXZhdGUgY2VudGVyUG9zaXRpb246IElBc3NldDtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGdhbWVTZXJ2aWNlIFRoZSBHYW1lU2VydmljZVxuICAgKiBAcGFyYW0gY3R4IFRoZSBjdHhcbiAgICogQHBhcmFtIGd1aWQgVGhlIGd1aWQgb2YgdGhlIGFsaWVuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihnYW1lU2VydmljZTogR2FtZVNlcnZpY2UsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBndWlkOiBudW1iZXIpIHtcbiAgICBzdXBlcihnYW1lU2VydmljZSwgY3R4LCBndWlkKTtcblxuICAgIHRoaXMubWlzc2lsZUZpcmVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1vdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbW92ZSBtZXRob2QgdG8gY2VudGVyIHRoZSBiYXNlXG4gICAqL1xuICBwdWJsaWMgbW92ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2FtZVNlcnZpY2UuZ2V0R3VubmVyUG9zaXRpb24oKTtcbiAgICB0aGlzLmNlbnRlclBvc2l0aW9uID0ge1xuICAgICAgeDogcG9zaXRpb24ueCArIEJMT0NLX1NJWkUgLyAyLFxuICAgICAgeTogcG9zaXRpb24ueVxuICAgIH0gYXMgSUFzc2V0O1xuXG4gICAgdGhpcy54ID0gcG9zaXRpb24ueDtcbiAgICB0aGlzLnkgPSBwb3NpdGlvbi55O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcm90YXRpb25cbiAgICogQHBhcmFtIHJvdGF0aW9uIFRoZSByb3RhdGlvbiBpbiBkZWdyZXNzXG4gICAqIEBwYXJhbSBpc1JpZ2h0ICBJZiB0aGUga2V5IGlzIHRoZSByaWdodCBrZXlcbiAgICovXG4gIHByb3RlY3RlZCBzZXRSb3RhdGlvbihyb3RhdGlvbjogbnVtYmVyLCBpc1JpZ2h0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5yb3RhdGlvbkRlZ3JlZSArPSBpc1JpZ2h0ID8gcm90YXRpb24gOiAtMSAqIHJvdGF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcm90YXRpb24gb2YgdGhlIGd1biB0byAwO1xuICAgKi9cbiAgcHVibGljIHJlc2V0Um90YXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5yb3RhdGlvbkRlZ3JlZSA9IDA7XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBldmVyeXRoaW5nIG5lY2Vzc2FyeVxuICAgKi9cbiAgcHJvdGVjdGVkIGRyYXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbWFnZUxvYWRlZCkge1xuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuXG4gICAgICB0aGlzLmN0eC50cmFuc2xhdGUodGhpcy54ICsgQkxPQ0tfU0laRSAvIDIsIHRoaXMueSk7XG4gICAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLmFzc2V0U2NhbGUueCwgdGhpcy5hc3NldFNjYWxlLnkpO1xuXG4gICAgICB0aGlzLmltYWdlcy5tYXAoKGltYWdlRGF0YTogSW1hZ2VMb2NhdGlvbk1vZGVsKSA9PiB7XG4gICAgICAgIGlmIChpbWFnZURhdGEuaXNSb3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmN0eC5yb3RhdGUodGhpcy5nYW1lU2VydmljZS5nZXRSYWRpYW5zKHRoaXMucm90YXRpb25EZWdyZWUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2VEYXRhLmltYWdlU291cmNlLCBpbWFnZURhdGEueCwgaW1hZ2VEYXRhLnkpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZSB0aGUgYmFzZVxuICAgKiBAcGFyYW0gbm93IHRoZSBjdXJyZW50IHRpbWVcbiAgICovXG4gIHB1YmxpYyBhbmltYXRlKG5vdyA9IDApOiB2b2lkIHtcbiAgICB0aGlzLmFzc2V0VGltZXIuZWxhcHNlZCA9IG5vdyAtIHRoaXMuYXNzZXRUaW1lci5zdGFydDtcblxuICAgIGlmICh0aGlzLmFzc2V0VGltZXIuZWxhcHNlZCA+IDUwMCAmJiB0aGlzLm1pc3NpbGVGaXJlZCkge1xuICAgICAgdGhpcy5taXNzaWxlRmlyZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXNzZXRUaW1lci5zdGFydCA9IG5vdztcbiAgICAgIHRoaXMuZ2FtZVNlcnZpY2UuZW1pdE1hc3Rlck9ic2VydmFibGVFdmVudCh7XG4gICAgICAgIHR5cGU6IE9ic2VydmFibGVUeXBlRW51bS5taXNzaWxlTGF1bmNoZWQsXG4gICAgICAgIGFzc2V0Q29vcmRpbmF0ZURhdGE6IHRoaXMuY2VudGVyUG9zaXRpb24sXG4gICAgICAgIGFzc2V0Um90YXRpb25EYXRhOiB0aGlzLnJvdGF0aW9uRGVncmVlXG4gICAgICB9IGFzIE9ic2VydmFibGVNb2RlbCk7XG4gICAgfVxuXG4gICAgdGhpcy5kcmF3KCk7XG4gIH1cbn1cbiJdfQ==