@Override
	public void moveTowards(MapLocation mapLocation) {
		Direction direction = rc.getLocation().directionTo(mapLocation);
		if (canMakeProgress(direction)) {
			moveToDirection(rc, direction);
			stuck = false;
			return ;
		} else {
			stuck = true;
			stuckLocation = rc.getLocation();
		}
		
		if (stuck) {
			int counter = 0;
			if (!direction.equals(Direction.OMNI) &&
					!direction.equals(Direction.NONE)) {
				while (!canMakeProgress(direction)) {
					if (rotateRight) {
						direction = direction.rotateRight();
					} else {
						direction = direction.rotateLeft();
					}
					if (counter++ > MAX_DIRECTIONS) {
						break;
					}
				}
			}
			
			MapLocation movingTo = rc.getLocation().add(direction);
			if (movingTo.equals(stuckLocation)) {
				rotateRight = !rotateRight;
				return;
			}
			if (canMakeProgress(direction)) {
				moveToDirection(rc, direction);
			}
		}
		
	}