bp-prism-game
Version:
The BP Prism Game
103 lines • 15.4 kB
JavaScript
import { Component, ViewChild } from '@angular/core';
import { ROWS, COLS } from '../prism-blast-constants';
import { PrismBlastClass } from '../prism-blast.class';
import { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';
import { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';
import { BLOCK_SIZE } from '../../../gameboard/gameboard-constants';
import * as i0 from "@angular/core";
import * as i1 from "../../../service/game.service";
import * as i2 from "@angular/common";
/**
* The Prism Blast Component
*/
export class PrismBlastComponent {
/**
* The Constructor
* @param gameService The GameService from DI
*/
constructor(gameService) {
this.gameService = gameService;
this.assets = [
{
key: 'prismBlast',
name: 'Blast'
}
];
}
/**
* On Init
*/
ngOnInit() {
/* eslint-disable-next-line */
const gameBoard = Array.from({ length: ROWS }, () => Array(COLS).fill(0));
/* eslint-disable-next-line */
this.ctx = this.gameService.initBoard(this.canvas, ROWS, COLS, BLOCK_SIZE * 5, gameBoard);
this.addPrismBlasts();
this.animate();
this.prismBlast.animate();
}
/**
* Add the aliens
*/
addPrismBlasts() {
this.prismBlasts = [];
const prismBlast = new PrismBlastClass(this.gameService, this.ctx, 1);
prismBlast.move(prismBlast.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));
this.prismBlasts.push(prismBlast);
this.prismBlast = this.prismBlasts[0];
this.prismBlast.isDestroyed = false;
}
/**
* Animate the object once
*/
animateAsset() {
this.prismBlast.isDestroyed = false;
cancelAnimationFrame(this.requestId);
this.animate();
}
/**
* Draw the board
*/
draw() {
this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
this.gameService.addOutlines(this.ctx, 1, 0.1);
}
/**
* Animate
*/
animate() {
this.draw();
this.prismBlast.animate();
this.requestId = requestAnimationFrame(this.animate.bind(this));
}
/**
* toggleAssets
*
* @param key The asset to display
*/
toggleAssets(key) {
this.prismBlast.isDestroyed = true;
this.draw();
let index = 0;
this.prismBlasts.map((prismBlast) => {
prismBlast.isDestroyed = true;
});
this.assets.map((asset, $index) => {
if (key === asset.key) {
index = $index;
}
});
this.prismBlast = this.prismBlasts[index];
this.animateAsset();
}
}
PrismBlastComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PrismBlastComponent, deps: [{ token: i1.GameService }], target: i0.ɵɵFactoryTarget.Component });
PrismBlastComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: PrismBlastComponent, selector: "bp-prism-blast", viewQueries: [{ propertyName: "canvas", first: true, predicate: ["board"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"game-container\">\n <div class=\"asset-title\">Prism Blast</div>\n <div class=\"game-board-container\">\n <canvas #board class=\"game-board\"></canvas>\n </div>\n <div class=\"button-container\">\n <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n <div *ngFor=\"let asset of assets\">\n <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n {{ asset.name }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".game-container .asset-title{margin-bottom:25px;width:100%;text-align:center}.game-container .game-board-container{display:flex;flex-direction:row;justify-content:center}.game-container .game-board-container .game-board{border:solid 2px grey;background-color:#000}.game-container .button-container{position:relative;margin-top:25px;display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-evenly}.game-container .button-container .animation-button{background-color:#4caf50}.game-container .button-container .button{flex-wrap:wrap;font-size:16px;margin-top:10px;padding:15px 30px;cursor:pointer;width:165px;border:1px solid black}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PrismBlastComponent, decorators: [{
type: Component,
args: [{ selector: 'bp-prism-blast', template: "<div class=\"game-container\">\n <div class=\"asset-title\">Prism Blast</div>\n <div class=\"game-board-container\">\n <canvas #board class=\"game-board\"></canvas>\n </div>\n <div class=\"button-container\">\n <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n <div *ngFor=\"let asset of assets\">\n <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n {{ asset.name }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".game-container .asset-title{margin-bottom:25px;width:100%;text-align:center}.game-container .game-board-container{display:flex;flex-direction:row;justify-content:center}.game-container .game-board-container .game-board{border:solid 2px grey;background-color:#000}.game-container .button-container{position:relative;margin-top:25px;display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-evenly}.game-container .button-container .animation-button{background-color:#4caf50}.game-container .button-container .button{flex-wrap:wrap;font-size:16px;margin-top:10px;padding:15px 30px;cursor:pointer;width:165px;border:1px solid black}\n"] }]
}], ctorParameters: function () { return [{ type: i1.GameService }]; }, propDecorators: { canvas: [{
type: ViewChild,
args: ['board', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20tYmxhc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpc20vc3JjL2xpYi9wcmlzbS9wcmlzbS1ibGFzdC90ZXN0LWNvbXBvbmVudC9wcmlzbS1ibGFzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmlzbS9zcmMvbGliL3ByaXNtL3ByaXNtLWJsYXN0L3Rlc3QtY29tcG9uZW50L3ByaXNtLWJsYXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7O0FBRXBFOztHQUVHO0FBTUgsTUFBTSxPQUFPLG1CQUFtQjtJQWdDOUI7OztPQUdHO0lBQ0gsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaO2dCQUNFLEdBQUcsRUFBRSxZQUFZO2dCQUNqQixJQUFJLEVBQUUsT0FBTzthQUNhO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sOEJBQThCO1FBQzlCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMs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LElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDOztnSEF4SFUsbUJBQW1CO29HQUFuQixtQkFBbUIscUtDbEJoQywrZkFjQTsyRkRJYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsZ0JBQWdCO2tHQVMxQixNQUFNO3NCQURMLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUk9XUywgQ09MUyB9IGZyb20gJy4uL3ByaXNtLWJsYXN0LWNvbnN0YW50cyc7XG5pbXBvcnQgeyBHYW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ2FtZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0Q29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvYXNzZXQtY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBQcmlzbUJsYXN0Q2xhc3MgfSBmcm9tICcuLi9wcmlzbS1ibGFzdC5jbGFzcyc7XG5pbXBvcnQgeyBBc3NldEFsaWduRW51bSB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0L2VudW0vYXNzZXQtYWxpZ24uZW51bSc7XG5pbXBvcnQgeyBBc3NldEFsaWduVmVydGljYWxFbnVtIH0gZnJvbSAnLi4vLi4vLi4vYXNzZXQvZW51bS9hc3NldC1hbGlnbi12ZXJ0aWNhbC5lbnVtJztcbmltcG9ydCB7IEJMT0NLX1NJWkUgfSBmcm9tICcuLi8uLi8uLi9nYW1lYm9hcmQvZ2FtZWJvYXJkLWNvbnN0YW50cyc7XG5cbi8qKlxuICogVGhlIFByaXNtIEJsYXN0IENvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1wcmlzbS1ibGFzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmlzbS1ibGFzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByaXNtLWJsYXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJpc21CbGFzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgY2FudmFzXG4gICAqL1xuICBAVmlld0NoaWxkKCdib2FyZCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGNhbnZhczogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG5cbiAgLyoqXG4gICAqIENUU1xuICAgKi9cbiAgcHJpdmF0ZSBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblxuICAvKipcbiAgICogcmVxdWVzdCBJZFxuICAgKi9cbiAgcHJpdmF0ZSByZXF1ZXN0SWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogcHJpc21CbGFzdHNcbiAgICovXG4gIHByaXZhdGUgcHJpc21CbGFzdHM6IFByaXNtQmxhc3RDbGFzc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpc21CbGFzdFxuICAgKi9cbiAgcHJpdmF0ZSBwcmlzbUJsYXN0OiBQcmlzbUJsYXN0Q2xhc3M7XG5cbiAgLyoqXG4gICAqIERlYnVnIEFzc2V0c1xuICAgKi9cbiAgcHVibGljIGFzc2V0czogQXNzZXRDb25maWd1cmF0aW9uTW9kZWxbXTtcblxuICAvKipcbiAgICogVGhlIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBnYW1lU2VydmljZSBUaGUgR2FtZVNlcnZpY2UgZnJvbSBESVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnYW1lU2VydmljZTogR2FtZVNlcnZpY2UpIHtcbiAgICB0aGlzLmFzc2V0cyA9IFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAncHJpc21CbGFzdCcsXG4gICAgICAgIG5hbWU6ICdCbGFzdCdcbiAgICAgIH0gYXMgQXNzZXRDb25maWd1cmF0aW9uTW9kZWxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIEluaXRcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICAgIGNvbnN0IGdhbWVCb2FyZCA9IEFycmF5LmZyb20oeyBsZW5ndGg6IFJPV1MgfSwgKCkgPT4gQXJyYXkoQ09MUykuZmlsbCgwKSk7XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICB0aGlzLmN0eCA9IHRoaXMuZ2FtZVNlcnZpY2UuaW5pdEJvYXJkKHRoaXMuY2FudmFzLCBST1dTLCBDT0xTLCBCTE9DS19TSVpFICogNSwgZ2FtZUJvYXJkKTtcblxuICAgIHRoaXMuYWRkUHJpc21CbGFzdHMoKTtcbiAgICB0aGlzLmFuaW1hdGUoKTtcbiAgICB0aGlzLnByaXNtQmxhc3QuYW5pbWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgYWxpZW5zXG4gICAqL1xuICBwcml2YXRlIGFkZFByaXNtQmxhc3RzKCk6IHZvaWQge1xuICAgIHRoaXMucHJpc21CbGFzdHMgPSBbXTtcblxuICAgIGNvbnN0IHByaXNtQmxhc3QgPSBuZXcgUHJpc21CbGFzdENsYXNzKHRoaXMuZ2FtZVNlcnZpY2UsIHRoaXMuY3R4LCAxKTtcbiAgICBwcmlzbUJsYXN0Lm1vdmUocHJpc21CbGFzdC5wb3NpdGlvbkFzc2V0KEFzc2V0QWxpZ25FbnVtLmNlbnRlciwgQXNzZXRBbGlnblZlcnRpY2FsRW51bS5taWRkbGUpKTtcbiAgICB0aGlzLnByaXNtQmxhc3RzLnB1c2gocHJpc21CbGFzdCk7XG5cbiAgICB0aGlzLnByaXNtQmxhc3QgPSB0aGlzLnByaXNtQmxhc3RzWzBdO1xuICAgIHRoaXMucHJpc21CbGFzdC5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgdGhlIG9iamVjdCBvbmNlXG4gICAqL1xuICBhbmltYXRlQXNzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5wcmlzbUJsYXN0LmlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0SWQpO1xuICAgIHRoaXMuYW5pbWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgdGhlIGJvYXJkXG4gICAqL1xuICBwcml2YXRlIGRyYXcoKSB7XG4gICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7XG4gICAgdGhpcy5nYW1lU2VydmljZS5hZGRPdXRsaW5lcyh0aGlzLmN0eCwgMSwgMC4xKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlXG4gICAqL1xuICBwdWJsaWMgYW5pbWF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXcoKTtcbiAgICB0aGlzLnByaXNtQmxhc3QuYW5pbWF0ZSgpO1xuICAgIHRoaXMucmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuYW5pbWF0ZS5iaW5kKHRoaXMpIGFzIEZyYW1lUmVxdWVzdENhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0b2dnbGVBc3NldHNcbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUgYXNzZXQgdG8gZGlzcGxheVxuICAgKi9cbiAgdG9nZ2xlQXNzZXRzKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmlzbUJsYXN0LmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmRyYXcoKTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHRoaXMucHJpc21CbGFzdHMubWFwKChwcmlzbUJsYXN0OiBQcmlzbUJsYXN0Q2xhc3MpID0+IHtcbiAgICAgIHByaXNtQmxhc3QuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuYXNzZXRzLm1hcCgoYXNzZXQ6IEFzc2V0Q29uZmlndXJhdGlvbk1vZGVsLCAkaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gYXNzZXQua2V5KSB7XG4gICAgICAgIGluZGV4ID0gJGluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wcmlzbUJsYXN0ID0gdGhpcy5wcmlzbUJsYXN0c1tpbmRleF07XG4gICAgdGhpcy5hbmltYXRlQXNzZXQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdhbWUtY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJhc3NldC10aXRsZVwiPlByaXNtIEJsYXN0PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJnYW1lLWJvYXJkLWNvbnRhaW5lclwiPlxuICAgIDxjYW52YXMgI2JvYXJkIGNsYXNzPVwiZ2FtZS1ib2FyZFwiPjwvY2FudmFzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJhbmltYXRlQXNzZXQoKVwiIGNsYXNzPVwiYW5pbWF0aW9uLWJ1dHRvbiBidXR0b25cIj5BbmltYXRlPC9idXR0b24+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgYXNzZXQgb2YgYXNzZXRzXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVBc3NldHMoYXNzZXQua2V5KVwiIGNsYXNzPVwiYW5pbWF0aW9uLWJ1dHRvbiBidXR0b25cIj5cbiAgICAgICAge3sgYXNzZXQubmFtZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=