From e30259bb228ff5011998b1b9dbaf2508b0047425 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sun, 13 Mar 2022 14:05:22 +0300 Subject: feat: add test to manually verify attachments --- src/Board/Board.test.ts | 35 +++++++++++++++++++++++++++++----- src/Board/Board.ts | 50 ++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 71 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/Board/Board.test.ts b/src/Board/Board.test.ts index 349a4aa..5023f0b 100644 --- a/src/Board/Board.test.ts +++ b/src/Board/Board.test.ts @@ -1,10 +1,11 @@ +import _ from 'lodash'; import assert from 'assert'; import Tile, { Feature, Direction } from '../Tile/Tile'; import TileOnBoard from '../Tile/TileOnBoard'; import Board from './Board'; const { Road, Town, Grass } = Feature; -const { North } = Direction; +const { North, East } = Direction; describe('Board', () => { describe('constructor', () => { @@ -23,10 +24,33 @@ describe('Board', () => { const legalMoves = board.getAttachments(tile); assert.strictEqual(legalMoves.length, 4); - assert.deepStrictEqual(legalMoves[0], { side: 0, rotation: 1, attachTo, tile }); - assert.deepStrictEqual(legalMoves[1], { side: 0, rotation: 3, attachTo, tile }); - assert.deepStrictEqual(legalMoves[2], { side: 2, rotation: 0, attachTo, tile }); - assert.deepStrictEqual(legalMoves[3], { side: 2, rotation: 2, attachTo, tile }); + assert.deepStrictEqual(legalMoves[0], { side: 0, orientation: 1, attachTo, tile }); + assert.deepStrictEqual(legalMoves[1], { side: 0, orientation: 3, attachTo, tile }); + assert.deepStrictEqual(legalMoves[2], { side: 2, orientation: 0, attachTo, tile }); + assert.deepStrictEqual(legalMoves[3], { side: 2, orientation: 2, attachTo, tile }); + }); + + it.skip('Have a look at my nice attachments manually bro', () => { + const board = new Board(); + + board.attach({ + tile: new Tile(Town, [Town, Grass, Town, Grass]), + attachTo: board.tiles[0], + orientation: 0, + side: North, + }); + + board.attach({ + tile: new Tile(Town, [Road, Town, Town, Road]), + attachTo: board.tiles[0], + orientation: 0, + side: East, + }); + + const tile = new Tile(Grass, [Town, Grass, Grass, Grass]); + + const attachments = board.getAttachments(tile); + attachments.forEach(attachment => board.previewAttachment(attachment)); }); }); @@ -50,6 +74,7 @@ describe('Board', () => { ); board.attach(attachment); + assert.strictEqual(board.tiles.length, 2); assert.deepStrictEqual(board.tiles[1], expectedTileOnBoard); }); diff --git a/src/Board/Board.ts b/src/Board/Board.ts index 1525c6c..ef4b4a5 100644 --- a/src/Board/Board.ts +++ b/src/Board/Board.ts @@ -17,13 +17,42 @@ export default class Board { const maxY = _.maxBy(this.tiles, 'position.y').position.y; const minY = _.minBy(this.tiles, 'position.y').position.y; + const maxX = _.maxBy(this.tiles, 'position.x').position.x; + const minX = _.minBy(this.tiles, 'position.x').position.x; + _.range(maxY, minY - 1, -1) - .map(y => { + .map((y: number) => { const rowTiles = _.filter(this.tiles, { position: { y } }); - // console.log({ rowTiles, y }); - console.log(rowTiles.map(tile => ` ${tile.sides[North]} `).join()); - console.log(rowTiles.map(tile => `${tile.sides[West]}${tile.center}${tile.sides[East]}`).join()); - console.log(rowTiles.map(tile => ` ${tile.sides[South]} `).join()); + + console.log( + _.range(minX, maxX + 1) + .map((x: number) => { + const tile = _.find(rowTiles, { position: { x, y } }); + if (!tile) return ' '; + return ` ${tile.getSide(North)} `; + }) + .join('|') + ); + + console.log( + _.range(minX, maxX + 1) + .map((x: number) => { + const tile = _.find(rowTiles, { position: { x, y } }); + if (!tile) return ' '; + return `${tile.getSide(West)}${tile.center}${tile.getSide(East)}`; + }) + .join('|') + ); + + console.log( + _.range(minX, maxX + 1) + .map((x: number) => { + const tile = _.find(rowTiles, { position: { x, y } }); + if (!tile) return ' '; + return ` ${tile.getSide(South)} `; + }) + .join('|') + ); }); } @@ -32,7 +61,7 @@ export default class Board { } attach(attachment: Attachment) { - const { tile, attachTo, side } = attachment; + const { tile, attachTo, side, orientation } = attachment; const xIncrement = { [East]: 1, @@ -52,13 +81,16 @@ export default class Board { x: attachTo.position.x + (xIncrement[side] || 0), y: attachTo.position.y + (yIncrement[side] || 0), }, + orientation, ); this.tiles.push(tileOnBoard); } - getLegalMoves(tile: Tile) { - const attachments = this.getAttachments(tile); - console.log(attachments); + previewAttachment(attachment: Attachment) { + console.log(attachment); + const previewBoard = _.cloneDeep(this); + previewBoard.attach(attachment); + previewBoard.print(); } } -- cgit v1.2.3