private bool CanMove(int currentX, int currentY, Direction direction, int length) { bool result = true; for (int i = 1; i <= length; i++) { switch (direction) { case Direction.North: if (tiles.CanMove(currentX, currentY + i) || barriers.GetBarrier(currentX, currentY, direction) || entities.GetEntity(currentX, currentY + i) || shift) { result = false; } break; case Direction.East: if (tiles.CanMove(currentX + i, currentY) || barriers.GetBarrier(currentX, currentY, direction) || entities.GetEntity(currentX + i, currentY) || shift) { result = false; } break; case Direction.South: if (tiles.CanMove(currentX, currentY - i) || barriers.GetBarrier(currentX, currentY, direction) || entities.GetEntity(currentX, currentY - i) || shift) { result = false; } break; case Direction.West: if (tiles.CanMove(currentX - i, currentY) || barriers.GetBarrier(currentX, currentY, direction) || entities.GetEntity(currentX - i, currentY) || shift) { result = false; } break; } } return(result); }