From e30259bb228ff5011998b1b9dbaf2508b0047425 Mon Sep 17 00:00:00 2001
From: eug-vs <eugene@eug-vs.xyz>
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/Board')

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