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
text/typescript
/**
* @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)
);
}
}