diff options
Diffstat (limited to 'src/Board/Board.ts')
-rw-r--r-- | src/Board/Board.ts | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/src/Board/Board.ts b/src/Board/Board.ts index b9a2136..65777ad 100644 --- a/src/Board/Board.ts +++ b/src/Board/Board.ts @@ -1,16 +1,14 @@ import _ from 'lodash'; -import Tile, { Feature, Direction } from '../Tile/Tile'; -import TileOnBoard, { Attachment } from '../Tile/TileOnBoard'; +import Tile, { Attachment, Direction } from '../Tile/Tile'; -const { Road, Town, Grass } = Feature; const { North, East, South, West } = Direction; export default class Board { - tiles: TileOnBoard[]; + tiles: Tile[]; - constructor(tiles?: TileOnBoard[]) { + constructor(tiles?: Tile[]) { if (tiles) this.tiles = tiles; - else this.tiles = [new TileOnBoard(Road, [Town, Road, Grass, Road])] + else this.tiles = [new Tile('R', 'CRFR')] } print() { @@ -29,7 +27,7 @@ export default class Board { .map((x: number) => { const tile = _.find(rowTiles, { position: { x, y } }); if (!tile) return ' '; - return ` ${tile.getSide(North)} `; + return ` ${tile.edges[North]} `; }) .join('|') ); @@ -39,7 +37,7 @@ export default class Board { .map((x: number) => { const tile = _.find(rowTiles, { position: { x, y } }); if (!tile) return ' '; - return `${tile.getSide(West)}${tile.center}${tile.getSide(East)}`; + return `${tile.edges[West]}${tile.center}${tile.edges[East]}`; }) .join('|') ); @@ -49,7 +47,7 @@ export default class Board { .map((x: number) => { const tile = _.find(rowTiles, { position: { x, y } }); if (!tile) return ' '; - return ` ${tile.getSide(South)} `; + return ` ${tile.edges[South]} `; }) .join('|') ); @@ -69,27 +67,27 @@ export default class Board { previewBoard.print(); } - getTileNeighbors(position: TileOnBoard['position']): TileOnBoard[] { + getTileNeighbors(position: Tile['position']): Tile[] { // Do not change the order! const neighborIncrements = [ - { x: 0, y: -1 }, - { x: -1, y: 0 }, { x: 0, y: 1 }, { x: 1, y: 0 }, + { x: 0, y: -1 }, + { x: -1, y: 0 }, ]; - return _.filter(_.map(neighborIncrements, ({ x, y }) => { + return _.map(neighborIncrements, ({ x, y }) => { return _.find(this.tiles, { position: { x: position.x + x, y: position.y + y, } }); - })); + }); } - calculateNewTilePosition(attachment: Attachment): TileOnBoard['position'] { - const { attachTo: { position }, side } = attachment + calculateNewTilePosition(attachment: Attachment): Tile['position'] { + const { attachTo: { position }, edge } = attachment const xIncrement = { [East]: 1, @@ -102,13 +100,13 @@ export default class Board { }; return { - x: position.x + (xIncrement[side] || 0), - y: position.y + (yIncrement[side] || 0), + x: position.x + (xIncrement[edge] || 0), + y: position.y + (yIncrement[edge] || 0), }; } isLegalAttachment(attachment: Attachment) { - const { tile, side, orientation } = attachment; + const { tile } = attachment; const position = this.calculateNewTilePosition(attachment); @@ -116,12 +114,10 @@ export default class Board { if (isBusy) return false; const neighbors = this.getTileNeighbors(position); - - return _.every(_.map(neighbors, (neighbor: TileOnBoard) => { - if (!neighbor) return true; - if (neighbor.getSide(side) !== tile.getSide(side - orientation + 2)) return false; - return true; - })); + const neighborsRegex = _.map(neighbors, (neighbor: Tile, edge: number) => neighbor?.edges[edge] || '.').join(''); + const str = [tile.edges, tile.edges, tile.edges].join(''); + console.log(neighborsRegex, str); + return new RegExp(neighborsRegex).test(str); } attach(attachment: Attachment) { @@ -129,9 +125,9 @@ export default class Board { const position = this.calculateNewTilePosition(attachment); - const tileOnBoard = new TileOnBoard( + const tileOnBoard = new Tile( tile.center, - tile.sides, + tile.edges, tile.shield, position, orientation, |