aboutsummaryrefslogtreecommitdiff
path: root/src/Cell
diff options
context:
space:
mode:
Diffstat (limited to 'src/Cell')
-rw-r--r--src/Cell/Cell.test.ts56
-rw-r--r--src/Cell/Cell.ts76
2 files changed, 0 insertions, 132 deletions
diff --git a/src/Cell/Cell.test.ts b/src/Cell/Cell.test.ts
deleted file mode 100644
index be6f475..0000000
--- a/src/Cell/Cell.test.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import assert from 'assert';
-import Cell, { Direction, Item } from './Cell';
-
-const { North, East, South, West } = Direction;
-const { Road, Town, Empty, River } = Item;
-
-describe('Cell', () => {
- describe('getSide', () => {
- it('Should get North, East, South and West sides correctly', () => {
- const cell = new Cell(Empty, [Road, Town, Empty, River]);
-
- assert.strictEqual(cell.getSide(North), Road);
- assert.strictEqual(cell.getSide(East), Town);
- assert.strictEqual(cell.getSide(South), Empty);
- assert.strictEqual(cell.getSide(West), River);
- });
-
- it('Should respect cell orientation', () => {
- const cell = new Cell(Empty, [Road, Town, Empty, River]);
- cell.rotate(5);
-
- assert.strictEqual(cell.getSide(North), River);
- assert.strictEqual(cell.getSide(East), Road);
- assert.strictEqual(cell.getSide(South), Town);
- assert.strictEqual(cell.getSide(West), Empty);
- });
-
- it('Should work with negative orientation', () => {
- const cell = new Cell(Empty, [Road, Town, Empty, River]);
- cell.rotate(-7);
-
- assert.strictEqual(cell.getSide(North), River);
- assert.strictEqual(cell.getSide(East), Road);
- assert.strictEqual(cell.getSide(South), Town);
- assert.strictEqual(cell.getSide(West), Empty);
- });
- });
-
- describe('getAttachments', () => {
- it('Should correclty list legal attachments', () => {
- const attachTo = new Cell(Town, [Road, Town, Town, Road])
- const cell = new Cell(Road, [Empty, Road, Road, Empty])
-
- cell.print();
- attachTo.print();
-
- const attachments = attachTo.getAttachments(cell);
- assert.strictEqual(attachments.length, 4);
- assert.deepStrictEqual(attachments[0], { side: 0, rotation: 0, cell, attachTo });
- assert.deepStrictEqual(attachments[1], { side: 0, rotation: 1, cell, attachTo });
- assert.deepStrictEqual(attachments[2], { side: 3, rotation: 0, cell, attachTo });
- assert.deepStrictEqual(attachments[3], { side: 3, rotation: 3, cell, attachTo });
- });
- });
-});
-
diff --git a/src/Cell/Cell.ts b/src/Cell/Cell.ts
deleted file mode 100644
index 70bb792..0000000
--- a/src/Cell/Cell.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import _ from 'lodash';
-import Debug, { Debugger } from 'debug';
-
-const debug = Debug('cell');
-
-export enum Direction {
- North,
- East,
- South,
- West
-}
-
-export enum Item {
- Empty = " ",
- Road = "R",
- Town = "T",
- River = "I",
- Church = "C",
-}
-
-export interface Attachment {
- attachTo: Cell;
- side: Direction;
- cell: Cell;
- rotation: number; // Clockwise rotation of a cell
-}
-
-
-export default class Cell {
- center: Item;
- private sides: [Item, Item, Item, Item];
- neighbors: [Cell, Cell, Cell, Cell];
- private orientation: number // amount of 90-degree counter-clockwise rotations from original orientation
- shield?: boolean;
-
- debug: Debugger;
-
- public constructor(center: Item, sides: [Item, Item, Item, Item], orientation = 0, shield = false) {
- this.center = center;
- this.sides = sides;
- this.shield = shield;
- this.orientation = orientation;
- }
-
- print() {
- console.log( ` ${this.getSide(Direction.North)} \n${this.getSide(Direction.West)}${this.center}${this.getSide(Direction.East)}\n ${this.getSide(Direction.South)} `);
- }
-
- getSide(direction: Direction) {
- return this.sides[(((this.orientation + direction) % 4) + 4) % 4];
- }
-
- rotate(rotation = 1) {
- debug(`Rotating ${rotation} clockwise`)
- this.orientation = this.orientation - rotation;
- }
-
- getAttachments(cell: Cell) {
- return _.flatten([0, 1, 2, 3].map(side => {
- const item = this.getSide(side);
- return [0, 1, 2, 3]
- .filter(rotation => cell.getSide(side - rotation + 2) === item)
- .map(rotation => ({
- cell,
- rotation,
- side,
- attachTo: this as Cell
- }))
- }));
- }
-
- attach(cell: Cell, side: Direction) {
- if (this.neighbors[side]) throw new Error('There is something already attached to this side!');
- this.neighbors[side] = cell;
- }
-}