bp-prism-game
Version:
The BP Prism Game
72 lines • 8.17 kB
JavaScript
import { COLORS, ASSET_ANIMATION } from './prism-blast-constants';
import { AssetClass } from '../../asset/asset.class';
/**
* The Prism Blast Class
*/
export class PrismBlastClass extends AssetClass {
/**
* Constructor
* @param gameService The GameService
* @param ctx The ctx
* @param guid The guid of the prism blast
*/
constructor(gameService, ctx, guid) {
super(gameService, ctx, guid);
this.isDestroyed = true;
this.assetAnimations = ASSET_ANIMATION;
this.assetAnimation = this.assetAnimations[0];
}
/**
* Draw everything necessary
*/
draw() {
this.ctx.save();
this.ctx.translate(this.x, this.y);
this.ctx.scale(1, 1);
this.ctx.rotate(this.angle);
this.drawPrismBlast();
this.ctx.restore();
}
/**
* Set the Blast Angle
* @param angle The angle of the blast
*/
setBlastAngle(angle) {
this.angle = this.gameService.getRadians(angle);
}
/**
* Draw the base
*/
drawPrismBlast() {
this.assetAnimation.forEach((row, y) => {
row.forEach((value, x) => {
if (x === 0) {
this.ctx.globalAlpha = 0.4;
this.ctx.fillStyle = COLORS[0];
this.ctx.fillRect(x - 0.2, y, x + this.getAssetHeight() + 0.4, 1);
}
if (value > 0) {
this.ctx.globalAlpha = 1;
this.ctx.fillStyle = COLORS[value];
this.ctx.fillRect(x, y, 1, 1);
}
});
});
}
/**
* Animate the prism blast
* @param now the current time
*/
animate(now = 0) {
this.assetTimer.elapsed = now - this.assetTimer.start;
if (this.stopAnimation()) {
return;
}
if (this.assetTimer.elapsed > 100) {
this.assetTimer.start = now;
this.assetAnimation = this.assetAnimations[this.animationCounter++ % this.assetAnimations.length];
}
this.draw();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20tYmxhc3QuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmlzbS9zcmMvbGliL3ByaXNtL3ByaXNtLWJsYXN0L3ByaXNtLWJsYXN0LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsVUFBVTtJQWM3Qzs7Ozs7T0FLRztJQUNILFlBQVksV0FBd0IsRUFBRSxHQUE2QixFQUFFLElBQVk7UUFDL0UsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNPLElBQUk7UUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNuRTtnQkFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMvQjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUV0RCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN4QixPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkc7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT0xPUlMsIEFTU0VUX0FOSU1BVElPTiB9IGZyb20gJy4vcHJpc20tYmxhc3QtY29uc3RhbnRzJztcbmltcG9ydCB7IEdhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9nYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXNzZXRDbGFzcyB9IGZyb20gJy4uLy4uL2Fzc2V0L2Fzc2V0LmNsYXNzJztcblxuLyoqXG4gKiBUaGUgUHJpc20gQmxhc3QgQ2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIFByaXNtQmxhc3RDbGFzcyBleHRlbmRzIEFzc2V0Q2xhc3Mge1xuICAvKipcbiAgICogVGhlIGFzc2V0IHRvIGFuaW1hdGVcbiAgICovXG4gIHByaXZhdGUgYXNzZXRBbmltYXRpb246IG51bWJlcltdW107XG4gIC8qKlxuICAgKiBBc3NldCBBbmltYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGFzc2V0QW5pbWF0aW9uczogbnVtYmVyW11bXVtdO1xuICAvKipcbiAgICogVGhlIGFuZ2xlIG9mIHRoZSBibGFzdFxuICAgKi9cbiAgcHJpdmF0ZSBhbmdsZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gZ2FtZVNlcnZpY2UgVGhlIEdhbWVTZXJ2aWNlXG4gICAqIEBwYXJhbSBjdHggVGhlIGN0eFxuICAgKiBAcGFyYW0gZ3VpZCBUaGUgZ3VpZCBvZiB0aGUgcHJpc20gYmxhc3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGd1aWQ6IG51bWJlcikge1xuICAgIHN1cGVyKGdhbWVTZXJ2aWNlLCBjdHgsIGd1aWQpO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuYXNzZXRBbmltYXRpb25zID0gQVNTRVRfQU5JTUFUSU9OO1xuICAgIHRoaXMuYXNzZXRBbmltYXRpb24gPSB0aGlzLmFzc2V0QW5pbWF0aW9uc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5XG4gICAqL1xuICBwcm90ZWN0ZWQgZHJhdygpOiB2b2lkIHtcbiAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgdGhpcy5jdHgudHJhbnNsYXRlKHRoaXMueCwgdGhpcy55KTtcbiAgICB0aGlzLmN0eC5zY2FsZSgxLCAxKTtcbiAgICB0aGlzLmN0eC5yb3RhdGUodGhpcy5hbmdsZSk7XG4gICAgdGhpcy5kcmF3UHJpc21CbGFzdCgpO1xuICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEJsYXN0IEFuZ2xlXG4gICAqIEBwYXJhbSBhbmdsZSBUaGUgYW5nbGUgb2YgdGhlIGJsYXN0XG4gICAqL1xuICBwdWJsaWMgc2V0Qmxhc3RBbmdsZShhbmdsZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hbmdsZSA9IHRoaXMuZ2FtZVNlcnZpY2UuZ2V0UmFkaWFucyhhbmdsZSk7XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgYmFzZVxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3UHJpc21CbGFzdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2V0QW5pbWF0aW9uLmZvckVhY2goKHJvdywgeSkgPT4ge1xuICAgICAgcm93LmZvckVhY2goKHZhbHVlLCB4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSAwLjQ7XG4gICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gQ09MT1JTWzBdO1xuICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHggLSAwLjIsIHksIHggKyB0aGlzLmdldEFzc2V0SGVpZ2h0KCkgKyAwLjQsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID4gMCkge1xuICAgICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBDT0xPUlNbdmFsdWVdO1xuICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgsIHksIDEsIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBwcmlzbSBibGFzdFxuICAgKiBAcGFyYW0gbm93IHRoZSBjdXJyZW50IHRpbWVcbiAgICovXG4gIHB1YmxpYyBhbmltYXRlKG5vdyA9IDApOiB2b2lkIHtcbiAgICB0aGlzLmFzc2V0VGltZXIuZWxhcHNlZCA9IG5vdyAtIHRoaXMuYXNzZXRUaW1lci5zdGFydDtcblxuICAgIGlmICh0aGlzLnN0b3BBbmltYXRpb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFzc2V0VGltZXIuZWxhcHNlZCA+IDEwMCkge1xuICAgICAgdGhpcy5hc3NldFRpbWVyLnN0YXJ0ID0gbm93O1xuICAgICAgdGhpcy5hc3NldEFuaW1hdGlvbiA9IHRoaXMuYXNzZXRBbmltYXRpb25zW3RoaXMuYW5pbWF0aW9uQ291bnRlcisrICUgdGhpcy5hc3NldEFuaW1hdGlvbnMubGVuZ3RoXTtcbiAgICB9XG5cbiAgICB0aGlzLmRyYXcoKTtcbiAgfVxufVxuIl19