diff options
Diffstat (limited to 'index.ts')
-rw-r--r-- | index.ts | 65 |
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(); |