protected boolean isLegalActionTiles(GameContext.PlayerView context,
			Set<Tile> tiles) {
		PlayerLocation location = context.getMyLocation();
		if (!meetPrecondition(context)) {
			return false;
		}

		int legalTilesSize = getActionTilesSize();
		if (legalTilesSize > 0
				&& (tiles == null || tiles.size() != legalTilesSize)) {
			return false;
		}

		Set<Tile> legalTilesRange = getActionTilesRange(context, location);
		if (tiles != null && legalTilesRange != null
				&& !legalTilesRange.containsAll(tiles)) {
			return false;
		}

		boolean legal = isLegalActionWithPreconition(context, tiles);
		return legal;
	}