aboutsummaryrefslogtreecommitdiff
path: root/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'index.ts')
-rw-r--r--index.ts65
1 files changed, 65 insertions, 0 deletions
diff --git a/index.ts b/index.ts
new file mode 100644
index 0000000..4ca38ae
--- /dev/null
+++ b/index.ts
@@ -0,0 +1,65 @@
+import Debug, { Debugger } from 'debug';
+
+enum Direction {
+ North,
+ East,
+ South,
+ West
+}
+
+enum Item {
+ Empty = " ",
+ Road = "R",
+ Town = "T",
+ River = "I",
+ Church = "C",
+}
+
+class Cell {
+ center: Item;
+ private sides: [Item, Item, Item, Item];
+ 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], shield = false) {
+ this.center = center;
+ this.sides = sides;
+ this.shield = shield;
+ this.orientation = 0;
+
+ this.debug = Debug('cell');
+ }
+
+ toString() {
+ return ` ${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) {
+ this.debug(`Rotating ${rotation} clockwise`)
+ this.orientation = this.orientation - rotation;
+ }
+
+ isAttachable(cell: Cell, side: Direction) {
+ return (this.getSide(side) === cell.getSide(side + 2));
+ }
+
+}
+
+const test = () => {
+ const cell = new Cell(Item.Empty, [Item.Road, Item.Road, Item.Town, Item.Town]);
+ console.log(cell.toString());
+
+
+ const other = new Cell(Item.Empty, [Item.Road, Item.Road, Item.Town, Item.Town]);
+ other.rotate();
+ console.log(other.toString());
+ console.log(cell.isAttachable(other, Direction.North));
+}
+
+test();