package logic; import java.io.Serializable; import java.util.Map; import java.util.Set; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Sets; public final class PieceMovements implements Serializable { public static final int UNLIMITED = -1; public static enum MovementDirection { NORTH('n'), SOUTH('s'), EAST('e'), WEST('w'), NORTHWEST('f'), NORTHEAST('g'), SOUTHWEST('a'), SOUTHEAST('d'); private MovementDirection(char direction) { mDirection = direction; } @Override public String toString() { return String.valueOf(mDirection); } private final char mDirection; } public PieceMovements() { mMovements = Maps.newHashMap(); mBidirectionalMovements = Sets.newHashSet(); } public void addMovement(MovementDirection direction, int distance) { Preconditions.checkState(distance >= 0 || distance == UNLIMITED); mMovements.put(direction, Integer.valueOf(distance)); } public void addBidirectionalMovement(BidirectionalMovement movement) { mBidirectionalMovements.add(movement); } // TODO: this shouldn't need to exist and definitely shouldn't be a public // method on the PieceMovements class public void clearBidirectionalMovements() { mBidirectionalMovements.clear(); } public int getDistance(MovementDirection direction) { return mMovements.containsKey(direction) ? mMovements.get(direction) : 0; } public Set<BidirectionalMovement> getBidirectionalMovements() { return mBidirectionalMovements; } private static final long serialVersionUID = -7877544580471563255L; private final Map<MovementDirection, Integer> mMovements; private final Set<BidirectionalMovement> mBidirectionalMovements; }