public static List <Vector2Int> GetMovementOptions(Level level, ChessIndex pieceType, Vector2Int position) { switch (pieceType) { case ChessIndex.BLACK_KING: case ChessIndex.WHITE_KING: return(GetKingMovements(level, position)); case ChessIndex.BLACK_QUEEN: case ChessIndex.WHITE_QUEEN: return(GetQueenMovements(level, position)); case ChessIndex.BLACK_TOWER: case ChessIndex.WHITE_TOWER: return(GetTowerMovements(level, position)); case ChessIndex.BLACK_KNIGHT: case ChessIndex.WHITE_KNIGHT: return(GetKnightMovements(level, position)); case ChessIndex.BLACK_BISHOP: case ChessIndex.WHITE_BISHOP: return(GetBishopMovements(level, position)); case ChessIndex.BLACK_PAWN: case ChessIndex.WHITE_PAWN: return(GetPawnMovements(level, position)); } return(null); }
private static List <Vector2Int> GetPawnMovements(Level level, Vector2Int pawnPosition) { List <Vector2Int> result = new List <Vector2Int>(); ChessIndex pawnType = (ChessIndex)level.data.GetItem(pawnPosition).x; Vector2Int destination = pawnType.IsWhite() ? new Vector2Int(0, -1) : new Vector2Int(0, 1); Vector2Int extraDestination = pawnType.IsWhite() ? new Vector2Int(0, -2) : new Vector2Int(0, 2); destination += pawnPosition; extraDestination += pawnPosition; if (level.data.IsItemInBounds(destination)) { int destinationType = level.data.GetItem(destination).x; if ((ChessIndex)destinationType == ChessIndex.EMPTY) { result.Add(destination); if (level.data.IsItemInBounds(extraDestination) && (pawnType.IsWhite() && pawnPosition.y == 6) || (pawnType.IsBlack() && pawnPosition.y == 1)) { int extraDestinationType = level.data.GetItem(extraDestination).x; if (CanMove((int)pawnType, extraDestinationType)) { result.Add(extraDestination); } } } } Vector2Int attackOne = pawnType.IsWhite() ? new Vector2Int(1, -1) : new Vector2Int(1, 1); Vector2Int attackTwo = pawnType.IsWhite() ? new Vector2Int(-1, -1) : new Vector2Int(-1, 1); attackOne += pawnPosition; attackTwo += pawnPosition; if (level.data.IsItemInBounds(attackOne)) { int destinationType = level.data.GetItem(attackOne).x; if (CanEat((int)pawnType, destinationType)) { result.Add(attackOne); } } if (level.data.IsItemInBounds(attackTwo)) { int destinationType = level.data.GetItem(attackTwo).x; if (CanEat((int)pawnType, destinationType)) { result.Add(attackTwo); } } return(result); }
private static bool CanEat(ChessIndex pieceType, ChessIndex destinationType) { if (pieceType.IsWhite() && destinationType.IsBlack()) { return(true); } if (pieceType.IsBlack() && destinationType.IsWhite()) { return(true); } return(false); }
private void Start() { if (instances == null) { instances = new List <ChessPieceSelector>(); } if (highlightedFloorTiles == null) { highlightedFloorTiles = new List <Vector2Int>(); } instances.Add(this); isoTransform = GetComponent <IsometricTransform>(); level = isoTransform.GetLevel(); pieceType = (ChessIndex)level.data.GetItem(isoTransform.coords.x, isoTransform.coords.y).x; }
public static bool IsSameColor(this ChessIndex ci1, ChessIndex ci2) { if (ci1.IsBlack() && ci2.IsBlack()) { return(true); } if (ci1.IsWhite() && ci2.IsWhite()) { return(true); } if (ci1.IsEmpty() && ci2.IsEmpty()) { return(true); } return(false); }
public static bool IsBlack(this ChessIndex ci) { return((int)ci < 7 && (int)ci != 0); }
public static bool IsWhite(this ChessIndex ci) { return((int)ci > 6); }
public static bool IsEmpty(this ChessIndex ci) { return(ci == ChessIndex.EMPTY); }