bp-prism-game
Version:
The BP Prism Game
81 lines • 8.09 kB
JavaScript
import { ImageLoadedEnum } from '../enum/image-loaded.enum';
/**
* The water service
*/
export class WaterService {
/**
* The constructor
*/
constructor(gameboard) {
this.gameboard = gameboard;
}
/**
* Determine the water value
* @param dx The y coordinate of the water
* @param dy The x coordinate of the water
*/
determineWaterValue(dy, dx) {
let value = 0;
value += this.determineNorthWaterValue(dy, dx);
value += this.determineEastWaterValue(dy, dx);
value += this.determineWestWaterValue(dy, dx);
value += this.determineSouthWaterValue(dy, dx);
return ImageLoadedEnum[`water${value}`];
}
/**
* is the asset water
* @param value The value of the asset
*/
isWater(value, waterKey) {
return value === 4 || value === 15 ? 0 : waterKey;
}
/**
* Determine the north water value
* @param dy The y coordinate of the water
* @param dx The x coordinate of the water
*/
determineNorthWaterValue(dy, dx) {
dy--;
if (dy < 0) {
return 1;
}
return this.isWater(this.gameboard[dy][dx], 1);
}
/**
* Determine the east water value
* @param dy The y coordinate of the water
* @param dx The x coordinate of the water
*/
determineEastWaterValue(dy, dx) {
dx++;
if (dy < 0 || dy >= this.gameboard.length || dx >= this.gameboard[dy].length) {
return 2;
}
return this.isWater(this.gameboard[dy][dx], 2);
}
/**
* Determine the west water value
* @param dy The y coordinate of the water
* @param dx The x coordinate of the water
*/
determineWestWaterValue(dy, dx) {
dx--;
if (dx < 0 || dy >= this.gameboard.length || dy < 0) {
return 8;
}
return this.isWater(this.gameboard[dy][dx], 8);
}
/**
* Determine the south water value
* @param dy The y coordinate of the water
* @param dx The x coordinate of the water
*/
determineSouthWaterValue(dy, dx) {
dy++;
if (dy >= this.gameboard.length) {
return 4;
}
return this.isWater(this.gameboard[dy][dx], 4);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaXNtL3NyYy9saWIvc2VydmljZS93YXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCOztPQUVHO0lBQ0gsWUFBb0IsU0FBcUI7UUFBckIsY0FBUyxHQUFULFNBQVMsQ0FBWTtJQUFHLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNJLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQy9DLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLEtBQUssSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEtBQUssSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEtBQUssSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sZUFBZSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQW9CLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE9BQU8sQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDN0MsT0FBTyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssd0JBQXdCLENBQUMsRUFBVSxFQUFFLEVBQVU7UUFDckQsRUFBRSxFQUFFLENBQUM7UUFDTCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx1QkFBdUIsQ0FBQyxFQUFVLEVBQUUsRUFBVTtRQUNwRCxFQUFFLEVBQUUsQ0FBQztRQUNMLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQzVFLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHVCQUF1QixDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3BELEVBQUUsRUFBRSxDQUFDO1FBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHdCQUF3QixDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3JELEVBQUUsRUFBRSxDQUFDO1FBQ0wsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDL0IsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEltYWdlTG9hZGVkRW51bSB9IGZyb20gJy4uL2VudW0vaW1hZ2UtbG9hZGVkLmVudW0nO1xuXG4vKipcbiAqIFRoZSB3YXRlciBzZXJ2aWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBXYXRlclNlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdhbWVib2FyZDogbnVtYmVyW11bXSkge31cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSB3YXRlciB2YWx1ZVxuICAgKiBAcGFyYW0gZHggVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgd2F0ZXJcbiAgICogQHBhcmFtIGR5IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHdhdGVyXG4gICAqL1xuICBwdWJsaWMgZGV0ZXJtaW5lV2F0ZXJWYWx1ZShkeTogbnVtYmVyLCBkeDogbnVtYmVyKTogSW1hZ2VMb2FkZWRFbnVtIHtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIHZhbHVlICs9IHRoaXMuZGV0ZXJtaW5lTm9ydGhXYXRlclZhbHVlKGR5LCBkeCk7XG4gICAgdmFsdWUgKz0gdGhpcy5kZXRlcm1pbmVFYXN0V2F0ZXJWYWx1ZShkeSwgZHgpO1xuICAgIHZhbHVlICs9IHRoaXMuZGV0ZXJtaW5lV2VzdFdhdGVyVmFsdWUoZHksIGR4KTtcbiAgICB2YWx1ZSArPSB0aGlzLmRldGVybWluZVNvdXRoV2F0ZXJWYWx1ZShkeSwgZHgpO1xuXG4gICAgcmV0dXJuIEltYWdlTG9hZGVkRW51bVtgd2F0ZXIke3ZhbHVlfWBdIGFzIEltYWdlTG9hZGVkRW51bTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpcyB0aGUgYXNzZXQgd2F0ZXJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgYXNzZXRcbiAgICovXG4gIHByaXZhdGUgaXNXYXRlcih2YWx1ZTogbnVtYmVyLCB3YXRlcktleTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDQgfHwgdmFsdWUgPT09IDE1ID8gMCA6IHdhdGVyS2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbm9ydGggd2F0ZXIgdmFsdWVcbiAgICogQHBhcmFtIGR5IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHdhdGVyXG4gICAqIEBwYXJhbSBkeCBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB3YXRlclxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlcm1pbmVOb3J0aFdhdGVyVmFsdWUoZHk6IG51bWJlciwgZHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgZHktLTtcbiAgICBpZiAoZHkgPCAwKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pc1dhdGVyKHRoaXMuZ2FtZWJvYXJkW2R5XVtkeF0sIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZWFzdCB3YXRlciB2YWx1ZVxuICAgKiBAcGFyYW0gZHkgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgd2F0ZXJcbiAgICogQHBhcmFtIGR4IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHdhdGVyXG4gICAqL1xuICBwcml2YXRlIGRldGVybWluZUVhc3RXYXRlclZhbHVlKGR5OiBudW1iZXIsIGR4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGR4Kys7XG4gICAgaWYgKGR5IDwgMCB8fCBkeSA+PSB0aGlzLmdhbWVib2FyZC5sZW5ndGggfHwgZHggPj0gdGhpcy5nYW1lYm9hcmRbZHldLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNXYXRlcih0aGlzLmdhbWVib2FyZFtkeV1bZHhdLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHdlc3Qgd2F0ZXIgdmFsdWVcbiAgICogQHBhcmFtIGR5IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHdhdGVyXG4gICAqIEBwYXJhbSBkeCBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB3YXRlclxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlcm1pbmVXZXN0V2F0ZXJWYWx1ZShkeTogbnVtYmVyLCBkeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBkeC0tO1xuICAgIGlmIChkeCA8IDAgfHwgZHkgPj0gdGhpcy5nYW1lYm9hcmQubGVuZ3RoIHx8IGR5IDwgMCkge1xuICAgICAgcmV0dXJuIDg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNXYXRlcih0aGlzLmdhbWVib2FyZFtkeV1bZHhdLCA4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHNvdXRoIHdhdGVyIHZhbHVlXG4gICAqIEBwYXJhbSBkeSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB3YXRlclxuICAgKiBAcGFyYW0gZHggVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgd2F0ZXJcbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lU291dGhXYXRlclZhbHVlKGR5OiBudW1iZXIsIGR4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGR5Kys7XG4gICAgaWYgKGR5ID49IHRoaXMuZ2FtZWJvYXJkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNXYXRlcih0aGlzLmdhbWVib2FyZFtkeV1bZHhdLCA0KTtcbiAgfVxufVxuIl19