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