All files Move.ts

100% Statements 13/13
66.66% Branches 6/9
100% Functions 3/3
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65        1x 1x 1x         1x                                   5611x 5611x 5611x 5611x 5611x 5611x 5611x       24x                           744x                      
/**
 * @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)
    );
  }
}