bp-prism-game
Version:
The BP Prism Game
92 lines • 11.2 kB
JavaScript
import { BridgeClass } from '../level/bridge/bridge.class';
import { AssetTypeEnum } from '../enum/asset-type.enum';
import { LevelOneClass } from '../level/level-one/level-one.class';
import { PathClass } from '../level/path/path.class';
import { PathService } from './path.service';
/**
* The gameboard service
*/
export class GameboardService {
/**
* The constructor
*/
constructor(gameService, ctx) {
this.gameService = gameService;
this.ctx = ctx;
this.level = [];
const gameboardPositions = this.gameService.getLevelPositions();
this.levelOne = new LevelOneClass(this.gameService, this.ctx, 1);
this.pathService = new PathService();
this.path = new PathClass(this.gameService, this.ctx);
this.buildPaths();
this.addBridge(gameboardPositions.filter((position) => position.type === AssetTypeEnum.bridge));
}
/**
* Build Paths
*/
buildPaths() {
/* eslint-disable-next-line */
this.gameService.getAlienBasePositions().map(() => { });
}
/**
* Set the paths
*/
setPath() {
const allPaths = [];
/* eslint-disable-next-line */
const paths = {};
this.gameService.getAlienBasePositions().map((basePosition) => {
this.pathService
.findShortestPath(this.gameService.convertIAssetToGameboardIAsset(basePosition), this.gameService.getGameBoard())
.map((position) => {
if (!Object.prototype.hasOwnProperty.call(paths, position.x)) {
paths[position.x] = {};
}
/* eslint-disable-next-line */
paths[position.x][position.y] = true;
});
});
Object.keys(paths).map((xKey) => {
/* eslint-disable-next-line */
Object.keys(paths[xKey]).map((yKey) => {
allPaths.push({
x: Number(xKey),
y: Number(yKey)
});
});
});
this.path.setPath(allPaths);
}
/**
* Animate the path
*
*/
initPath() {
this.setPath();
}
/**
* Add the bridge gameboard
*/
addBridge(bridgePosition) {
bridgePosition.map((bridgeLocation) => {
const bridge = new BridgeClass(this.gameService, this.ctx, this.level.length);
bridge.move({
x: bridgeLocation.position.x,
y: bridgeLocation.position.y
});
this.level.push(bridge);
});
}
/**
* Initialize the gameboard
* @param now the current time
*/
animate(now = 0) {
this.levelOne.animate();
this.path.animate(now);
this.level.map((level) => {
level.animate();
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZWJvYXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmlzbS9zcmMvbGliL3NlcnZpY2UvZ2FtZWJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFxQjNCOztPQUVHO0lBQ0gsWUFBb0IsV0FBd0IsRUFBVSxHQUE2QjtRQUEvRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQ2pGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWhCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRWhFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUVyQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLE1B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RyxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDbkMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2FtZVNlcnZpY2UgfSBmcm9tICcuL2dhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBJQXNzZXQgfSBmcm9tICcuLi9pbnRlcmZhY2UvYXNzZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExldmVsQ2xhc3MgfSBmcm9tICcuLi9sZXZlbC9sZXZlbC5jbGFzcyc7XG5pbXBvcnQgeyBCcmlkZ2VDbGFzcyB9IGZyb20gJy4uL2xldmVsL2JyaWRnZS9icmlkZ2UuY2xhc3MnO1xuaW1wb3J0IHsgQXNzZXRUeXBlRW51bSB9IGZyb20gJy4uL2VudW0vYXNzZXQtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFzc2V0TG9jYXRpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL2Fzc2V0LWxvY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7IExldmVsT25lQ2xhc3MgfSBmcm9tICcuLi9sZXZlbC9sZXZlbC1vbmUvbGV2ZWwtb25lLmNsYXNzJztcbmltcG9ydCB7IFBhdGhDbGFzcyB9IGZyb20gJy4uL2xldmVsL3BhdGgvcGF0aC5jbGFzcyc7XG5pbXBvcnQgeyBQYXRoU2VydmljZSB9IGZyb20gJy4vcGF0aC5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgZ2FtZWJvYXJkIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEdhbWVib2FyZFNlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIGxldmVsXG4gICAqL1xuICBwcml2YXRlIGxldmVsOiBMZXZlbENsYXNzW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoXG4gICAqL1xuICBwcml2YXRlIHBhdGg6IFBhdGhDbGFzcztcblxuICAvKipcbiAgICogVGhlIGdhbWVib2FyZCBvbmVcbiAgICovXG4gIHByaXZhdGUgbGV2ZWxPbmU6IExldmVsT25lQ2xhc3M7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoU2VydmljZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXRoU2VydmljZTogUGF0aFNlcnZpY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnYW1lU2VydmljZTogR2FtZVNlcnZpY2UsIHByaXZhdGUgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpIHtcbiAgICB0aGlzLmxldmVsID0gW107XG5cbiAgICBjb25zdCBnYW1lYm9hcmRQb3NpdGlvbnMgPSB0aGlzLmdhbWVTZXJ2aWNlLmdldExldmVsUG9zaXRpb25zKCk7XG5cbiAgICB0aGlzLmxldmVsT25lID0gbmV3IExldmVsT25lQ2xhc3ModGhpcy5nYW1lU2VydmljZSwgdGhpcy5jdHgsIDEpO1xuICAgIHRoaXMucGF0aFNlcnZpY2UgPSBuZXcgUGF0aFNlcnZpY2UoKTtcblxuICAgIHRoaXMucGF0aCA9IG5ldyBQYXRoQ2xhc3ModGhpcy5nYW1lU2VydmljZSwgdGhpcy5jdHgpO1xuICAgIHRoaXMuYnVpbGRQYXRocygpO1xuXG4gICAgdGhpcy5hZGRCcmlkZ2UoZ2FtZWJvYXJkUG9zaXRpb25zLmZpbHRlcigocG9zaXRpb246IEFzc2V0TG9jYXRpb25Nb2RlbCkgPT4gcG9zaXRpb24udHlwZSA9PT0gQXNzZXRUeXBlRW51bS5icmlkZ2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBQYXRoc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFBhdGhzKCk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICAgIHRoaXMuZ2FtZVNlcnZpY2UuZ2V0QWxpZW5CYXNlUG9zaXRpb25zKCkubWFwKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBhdGhzXG4gICAqL1xuICBwcml2YXRlIHNldFBhdGgoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsUGF0aHM6IElBc3NldFtdID0gW107XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgY29uc3QgcGF0aHMgPSB7fTtcbiAgICB0aGlzLmdhbWVTZXJ2aWNlLmdldEFsaWVuQmFzZVBvc2l0aW9ucygpLm1hcCgoYmFzZVBvc2l0aW9uOiBJQXNzZXQpID0+IHtcbiAgICAgIHRoaXMucGF0aFNlcnZpY2VcbiAgICAgICAgLmZpbmRTaG9ydGVzdFBhdGgoXG4gICAgICAgICAgdGhpcy5nYW1lU2VydmljZS5jb252ZXJ0SUFzc2V0VG9HYW1lYm9hcmRJQXNzZXQoYmFzZVBvc2l0aW9uKSxcbiAgICAgICAgICB0aGlzLmdhbWVTZXJ2aWNlLmdldEdhbWVCb2FyZCgpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgocG9zaXRpb246IElBc3NldCkgPT4ge1xuICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhdGhzLCBwb3NpdGlvbi54KSkge1xuICAgICAgICAgICAgcGF0aHNbcG9zaXRpb24ueF0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgICAgICAgcGF0aHNbcG9zaXRpb24ueF1bcG9zaXRpb24ueV0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIE9iamVjdC5rZXlzKHBhdGhzKS5tYXAoKHhLZXk6IHN0cmluZykgPT4ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgICBPYmplY3Qua2V5cyhwYXRoc1t4S2V5XSkubWFwKCh5S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgYWxsUGF0aHMucHVzaCh7XG4gICAgICAgICAgeDogTnVtYmVyKHhLZXkpLFxuICAgICAgICAgIHk6IE51bWJlcih5S2V5KVxuICAgICAgICB9IGFzIElBc3NldCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMucGF0aC5zZXRQYXRoKGFsbFBhdGhzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBwYXRoXG4gICAqXG4gICAqL1xuICBwdWJsaWMgaW5pdFBhdGgoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQYXRoKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBicmlkZ2UgZ2FtZWJvYXJkXG4gICAqL1xuICBwcml2YXRlIGFkZEJyaWRnZShicmlkZ2VQb3NpdGlvbjogQXNzZXRMb2NhdGlvbk1vZGVsW10pOiB2b2lkIHtcbiAgICBicmlkZ2VQb3NpdGlvbi5tYXAoKGJyaWRnZUxvY2F0aW9uOiBBc3NldExvY2F0aW9uTW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IGJyaWRnZSA9IG5ldyBCcmlkZ2VDbGFzcyh0aGlzLmdhbWVTZXJ2aWNlLCB0aGlzLmN0eCwgdGhpcy5sZXZlbC5sZW5ndGgpO1xuICAgICAgYnJpZGdlLm1vdmUoe1xuICAgICAgICB4OiBicmlkZ2VMb2NhdGlvbi5wb3NpdGlvbi54LFxuICAgICAgICB5OiBicmlkZ2VMb2NhdGlvbi5wb3NpdGlvbi55XG4gICAgICB9IGFzIElBc3NldCk7XG5cbiAgICAgIHRoaXMubGV2ZWwucHVzaChicmlkZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGdhbWVib2FyZFxuICAgKiBAcGFyYW0gbm93IHRoZSBjdXJyZW50IHRpbWVcbiAgICovXG4gIHB1YmxpYyBhbmltYXRlKG5vdyA9IDApOiB2b2lkIHtcbiAgICB0aGlzLmxldmVsT25lLmFuaW1hdGUoKTtcblxuICAgIHRoaXMucGF0aC5hbmltYXRlKG5vdyk7XG5cbiAgICB0aGlzLmxldmVsLm1hcCgobGV2ZWw6IExldmVsQ2xhc3MpID0+IHtcbiAgICAgIGxldmVsLmFuaW1hdGUoKTtcbiAgICB9KTtcbiAgfVxufVxuIl19