UNPKG

labyrinth-game-logic

Version:

A libary that implements the boardgame labyrinth and exposes the functionality to create and interact with games

65 lines (59 loc) 2.06 kB
/** * @author Timo lehnertz */ import { BoardPosition } from "./BoardPosition"; import { ShiftPosition } from "./ShiftPosition"; import { Treasure } from "./Treasure"; /** * Immutable Move class representing a move in the game */ export class Move { public readonly playerIndex: number; public readonly rotateBeforeShift: number; // multiple of 90deg cw public readonly fromShiftPosition: ShiftPosition; public readonly toShiftPosition: ShiftPosition; public readonly from: BoardPosition; public readonly to: BoardPosition; public readonly collectedTreasure: Treasure | null; public constructor( playerIndex: number, rotateBeforeShift: number, fromShiftPosition: ShiftPosition, toShiftPosition: ShiftPosition, from: BoardPosition, to: BoardPosition, collectedTreasure: Treasure | null ) { this.playerIndex = playerIndex; this.rotateBeforeShift = rotateBeforeShift; this.fromShiftPosition = fromShiftPosition; this.toShiftPosition = toShiftPosition; this.from = from; this.to = to; this.collectedTreasure = collectedTreasure; } public static create(instance: Move): Move { return new Move( instance.playerIndex, instance.rotateBeforeShift, ShiftPosition.create(instance.fromShiftPosition), ShiftPosition.create(instance.toShiftPosition), BoardPosition.create(instance.from), BoardPosition.create(instance.to), instance.collectedTreasure === null ? null : Treasure.create(instance.collectedTreasure) ); } public equals(other: Move): boolean { return ( this.playerIndex !== other.playerIndex && this.rotateBeforeShift !== other.rotateBeforeShift && this.fromShiftPosition.equals(other.fromShiftPosition) && this.toShiftPosition.equals(other.toShiftPosition) && this.from.equals(other.from) && this.to.equals(other.to) && Treasure.compare(this.collectedTreasure, other.collectedTreasure) ); } }