bp-prism-game
Version:
The BP Prism Game
112 lines • 15.8 kB
JavaScript
import { Component, ViewChild } from '@angular/core';
import { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';
import { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';
import { LetterClass } from '../letter.class';
import * as i0 from "@angular/core";
import * as i1 from "../../../service/game.service";
import * as i2 from "@angular/common";
/**
* The Letter Component
*/
export class LetterComponent {
/**
* The Constructor
* @param gameService The GameService from DI
*/
constructor(gameService) {
this.gameService = gameService;
this.assets = [
{
key: 'L',
name: 'L'
},
{
key: 'P',
name: 'P'
}
];
this.fullScale = true;
}
/**
* On Init
*/
ngOnInit() {
const rows = 20;
const columns = 22;
const gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0));
this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25, gameBoard);
this.addLetter();
this.animate();
}
/**
* Add the letters
*/
addLetter() {
const letterClass = new LetterClass(this.gameService, this.ctx);
letterClass.move(letterClass.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));
letterClass.setLetter('L');
letterClass.isDestroyed = true;
this.letter = letterClass;
}
/**
* Animate the object once
*/
animateAsset() {
this.letter.isDestroyed = false;
this.letter.move(this.letter.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));
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.025);
}
/**
* Animate
*/
animate() {
this.draw();
this.letter.animate();
this.requestId = requestAnimationFrame(this.animate.bind(this));
}
/**
* toggleScale
*
*/
toggleScale() {
this.fullScale = !this.fullScale;
this.draw();
this.letter.assetScale = {
x: this.fullScale ? 0.1 : 0.2,
y: this.fullScale ? 0.1 : 0.2
};
this.animateAsset();
}
/**
* toggleAssets
*
* @param key The asset to display
*/
toggleAssets(key) {
this.draw();
this.assets.map((asset) => {
if (key === asset.key) {
this.letter.setLetter(key);
}
});
this.animateAsset();
}
}
LetterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: LetterComponent, deps: [{ token: i1.GameService }], target: i0.ɵɵFactoryTarget.Component });
LetterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: LetterComponent, selector: "bp-prism-letter", viewQueries: [{ propertyName: "canvas", first: true, predicate: ["board"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"game-container\">\n <div class=\"asset-title\">Letters</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 <button (click)=\"toggleScale()\" class=\"animation-button button\">Scale</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: LetterComponent, decorators: [{
type: Component,
args: [{ selector: 'bp-prism-letter', template: "<div class=\"game-container\">\n <div class=\"asset-title\">Letters</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 <button (click)=\"toggleScale()\" class=\"animation-button button\">Scale</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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0dGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaXNtL3NyYy9saWIvdGV4dC9sZXR0ZXIvdGVzdC1jb21wb25lbnQvbGV0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaXNtL3NyYy9saWIvdGV4dC9sZXR0ZXIvdGVzdC1jb21wb25lbnQvbGV0dGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBRzlDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGVBQWU7SUFnQzFCOzs7T0FHRztJQUNILFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWjtnQkFDRSxHQUFHLEVBQUUsR0FBRztnQkFDUixJQUFJLEVBQUUsR0FBRzthQUNpQjtZQUM1QjtnQkFDRSxHQUFHLEVBQUUsR0FBRztnQkFDUixJQUFJLEVBQUUsR0FBRzthQUNpQjtTQUM3QixDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxH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QUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7OzRHQW5JVSxlQUFlO2dHQUFmLGVBQWUsc0tDakI1QixtbEJBZUE7MkZERWEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxpQkFBaUI7a0dBUzNCLE1BQU07c0JBREwsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHYW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ2FtZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0gfSBmcm9tICcuLi8uLi8uLi9hc3NldC9lbnVtL2Fzc2V0LWFsaWduLXZlcnRpY2FsLmVudW0nO1xuaW1wb3J0IHsgQXNzZXRBbGlnbkVudW0gfSBmcm9tICcuLi8uLi8uLi9hc3NldC9lbnVtL2Fzc2V0LWFsaWduLmVudW0nO1xuaW1wb3J0IHsgQXNzZXRDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9hc3NldC1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IExldHRlckNsYXNzIH0gZnJvbSAnLi4vbGV0dGVyLmNsYXNzJztcbmltcG9ydCB7IEFzc2V0U2NhbGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2Fzc2V0LXNjYWxlLm1vZGUnO1xuXG4vKipcbiAqIFRoZSBMZXR0ZXIgQ29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLXByaXNtLWxldHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9sZXR0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sZXR0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMZXR0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogVGhlIGNhbnZhc1xuICAgKi9cbiAgQFZpZXdDaGlsZCgnYm9hcmQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjYW52YXM6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBDVFNcbiAgICovXG4gIHByaXZhdGUgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QgSWRcbiAgICovXG4gIHByaXZhdGUgcmVxdWVzdElkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsZXR0ZXJcbiAgICovXG4gIHByaXZhdGUgbGV0dGVyOiBMZXR0ZXJDbGFzcztcblxuICAvKipcbiAgICogVGhlIHNjYWxlXG4gICAqL1xuICBwcml2YXRlIGZ1bGxTY2FsZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVidWcgQXNzZXRzXG4gICAqL1xuICBwdWJsaWMgYXNzZXRzOiBBc3NldENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGdhbWVTZXJ2aWNlIFRoZSBHYW1lU2VydmljZSBmcm9tIERJXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdhbWVTZXJ2aWNlOiBHYW1lU2VydmljZSkge1xuICAgIHRoaXMuYXNzZXRzID0gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdMJyxcbiAgICAgICAgbmFtZTogJ0wnXG4gICAgICB9IGFzIEFzc2V0Q29uZmlndXJhdGlvbk1vZGVsLFxuICAgICAge1xuICAgICAgICBrZXk6ICdQJyxcbiAgICAgICAgbmFtZTogJ1AnXG4gICAgICB9IGFzIEFzc2V0Q29uZmlndXJhdGlvbk1vZGVsXG4gICAgXTtcblxuICAgIHRoaXMuZnVsbFNjYWxlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBJbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCByb3dzID0gMjA7XG4gICAgY29uc3QgY29sdW1ucyA9IDIyO1xuICAgIGNvbnN0IGdhbWVCb2FyZCA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHJvd3MgfSwgKCkgPT4gQXJyYXkoY29sdW1ucykuZmlsbCgwKSBhcyBudW1iZXJbXSk7XG5cbiAgICB0aGlzLmN0eCA9IHRoaXMuZ2FtZVNlcnZpY2UuaW5pdEJvYXJkKHRoaXMuY2FudmFzLCByb3dzLCBjb2x1bW5zLCAyNSwgZ2FtZUJvYXJkKTtcbiAgICB0aGlzLmFkZExldHRlcigpO1xuICAgIHRoaXMuYW5pbWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgbGV0dGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRMZXR0ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgbGV0dGVyQ2xhc3MgPSBuZXcgTGV0dGVyQ2xhc3ModGhpcy5nYW1lU2VydmljZSwgdGhpcy5jdHgpO1xuICAgIGxldHRlckNsYXNzLm1vdmUobGV0dGVyQ2xhc3MucG9zaXRpb25Bc3NldChBc3NldEFsaWduRW51bS5jZW50ZXIsIEFzc2V0QWxpZ25WZXJ0aWNhbEVudW0ubWlkZGxlKSk7XG4gICAgbGV0dGVyQ2xhc3Muc2V0TGV0dGVyKCdMJyk7XG4gICAgbGV0dGVyQ2xhc3MuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5sZXR0ZXIgPSBsZXR0ZXJDbGFzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBvYmplY3Qgb25jZVxuICAgKi9cbiAgYW5pbWF0ZUFzc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubGV0dGVyLmlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5sZXR0ZXIubW92ZSh0aGlzLmxldHRlci5wb3NpdGlvbkFzc2V0KEFzc2V0QWxpZ25FbnVtLmNlbnRlciwgQXNzZXRBbGlnblZlcnRpY2FsRW51bS5taWRkbGUpKTtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlcXVlc3RJZCk7XG4gICAgdGhpcy5hbmltYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgYm9hcmRcbiAgICovXG4gIHByaXZhdGUgZHJhdygpIHtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICB0aGlzLmdhbWVTZXJ2aWNlLmFkZE91dGxpbmVzKHRoaXMuY3R4LCAxLCAwLjAyNSk7XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZVxuICAgKi9cbiAgcHVibGljIGFuaW1hdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3KCk7XG4gICAgdGhpcy5sZXR0ZXIuYW5pbWF0ZSgpO1xuICAgIHRoaXMucmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuYW5pbWF0ZS5iaW5kKHRoaXMpIGFzIEZyYW1lUmVxdWVzdENhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0b2dnbGVTY2FsZVxuICAgKlxuICAgKi9cbiAgdG9nZ2xlU2NhbGUoKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsU2NhbGUgPSAhdGhpcy5mdWxsU2NhbGU7XG4gICAgdGhpcy5kcmF3KCk7XG4gICAgdGhpcy5sZXR0ZXIuYXNzZXRTY2FsZSA9IHtcbiAgICAgIHg6IHRoaXMuZnVsbFNjYWxlID8gMC4xIDogMC4yLFxuICAgICAgeTogdGhpcy5mdWxsU2NhbGUgPyAwLjEgOiAwLjJcbiAgICB9IGFzIEFzc2V0U2NhbGVNb2RlbDtcbiAgICB0aGlzLmFuaW1hdGVBc3NldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRvZ2dsZUFzc2V0c1xuICAgKlxuICAgKiBAcGFyYW0ga2V5IFRoZSBhc3NldCB0byBkaXNwbGF5XG4gICAqL1xuICB0b2dnbGVBc3NldHMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXcoKTtcbiAgICB0aGlzLmFzc2V0cy5tYXAoKGFzc2V0OiBBc3NldENvbmZpZ3VyYXRpb25Nb2RlbCkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gYXNzZXQua2V5KSB7XG4gICAgICAgIHRoaXMubGV0dGVyLnNldExldHRlcihrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hbmltYXRlQXNzZXQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdhbWUtY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJhc3NldC10aXRsZVwiPkxldHRlcnM8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImdhbWUtYm9hcmQtY29udGFpbmVyXCI+XG4gICAgPGNhbnZhcyAjYm9hcmQgY2xhc3M9XCJnYW1lLWJvYXJkXCI+PC9jYW52YXM+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImFuaW1hdGVBc3NldCgpXCIgY2xhc3M9XCJhbmltYXRpb24tYnV0dG9uIGJ1dHRvblwiPkFuaW1hdGU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVTY2FsZSgpXCIgY2xhc3M9XCJhbmltYXRpb24tYnV0dG9uIGJ1dHRvblwiPlNjYWxlPC9idXR0b24+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgYXNzZXQgb2YgYXNzZXRzXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVBc3NldHMoYXNzZXQua2V5KVwiIGNsYXNzPVwiYW5pbWF0aW9uLWJ1dHRvbiBidXR0b25cIj5cbiAgICAgICAge3sgYXNzZXQubmFtZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=