Example #1
0
def canCityBuildUnit(unitInfo, city, eAskingTeam, checkBonuses=True):
    # religion
    if unitInfo.isPrereqReligion():
        if not city or city.getReligionCount() > 0:
            # EF: Seems odd to enforce NO religions in the city,
            #     but this is how CvPlot.canTrain() does it.
            #     The function should actually be called isPrereqNoReligion().
            return False
    eReligion = unitInfo.getPrereqReligion()
    if eReligion != -1 and not (city and city.isHasReligion(eReligion)):
        return False
    # corporation
    eCorp = unitInfo.getPrereqCorporation()
    if eCorp != -1 and not (city and city.isActiveCorporation(eCorp)):
        return False
    # skipping isPrereqBonuses as the land part looks broken
    # and we don't want to limit work boats if all resources are covered
    # domain
    if unitInfo.getDomainType() == DomainTypes.DOMAIN_SEA:
        if not (city and PlayerUtil.isSaltWaterPort(city, eAskingTeam)):
            return False
        # EF: this is how CyPlot does it
        #plot = city.plot()
        #if not plot.isWater() or not plot.isCoastalLand(unitInfo.getMinAreaSize()):
        #	continue
    else:
        minArea = unitInfo.getMinAreaSize()
        if minArea != -1:
            if eAskingTeam != -1 or not city or city.plot().area().getNumTiles(
            ) < minArea:
                return False
    # holy city
    eReligion = unitInfo.getHolyCity()
    if eReligion != -1 and not (city and city.isHolyCity(eReligion)):
        return False
    # building
    eBuilding = unitInfo.getPrereqBuilding()
    if eBuilding != -1:
        if eAskingTeam != -1 or not city:
            return False
        if city.getNumBuilding(eBuilding) == 0:
            eSpecialBuilding = gc.getBuildingInfo(
                eBuilding).getSpecialBuildingType()
            if eSpecialBuilding == -1 or not gc.getPlayer(city.getOwner(
            )).isSpecialBuildingNotRequired(eSpecialBuilding):
                return False
    # resources
    if checkBonuses and not cityHasBonusesForUnit(unitInfo, city):
        return False
    # passes all tests for this city
    return True
Example #2
0
def canCityBuildUnit(unitInfo, city, eAskingTeam, checkBonuses=True):
    # religion
    if unitInfo.isPrereqReligion():
        if not city or city.getReligionCount() > 0:
            # EF: Seems odd to enforce NO religions in the city,
            #     but this is how CvPlot.canTrain() does it.
            #     The function should actually be called isPrereqNoReligion().
            return False
    eReligion = unitInfo.getPrereqReligion()
    if eReligion != -1 and not (city and city.isHasReligion(eReligion)):
        return False
        # corporation
    eCorp = unitInfo.getPrereqCorporation()
    if eCorp != -1 and not (city and city.isActiveCorporation(eCorp)):
        return False
        # skipping isPrereqBonuses as the land part looks broken
        # and we don't want to limit work boats if all resources are covered
        # domain
    if unitInfo.getDomainType() == DomainTypes.DOMAIN_SEA:
        if not (city and PlayerUtil.isSaltWaterPort(city, eAskingTeam)):
            return False
            # EF: this is how CyPlot does it
            # plot = city.plot()
            # if not plot.isWater() or not plot.isCoastalLand(unitInfo.getMinAreaSize()):
            # 	continue
    else:
        minArea = unitInfo.getMinAreaSize()
        if minArea != -1:
            if eAskingTeam != -1 or not city or city.plot().area().getNumTiles() < minArea:
                return False
                # holy city
    eReligion = unitInfo.getHolyCity()
    if eReligion != -1 and not (city and city.isHolyCity(eReligion)):
        return False
        # building
    eBuilding = unitInfo.getPrereqBuilding()
    if eBuilding != -1:
        if eAskingTeam != -1 or not city:
            return False
        if city.getNumBuilding(eBuilding) == 0:
            eSpecialBuilding = gc.getBuildingInfo(eBuilding).getSpecialBuildingType()
            if eSpecialBuilding == -1 or not gc.getPlayer(city.getOwner()).isSpecialBuildingNotRequired(
                eSpecialBuilding
            ):
                return False
                # resources
    if checkBonuses and not cityHasBonusesForUnit(unitInfo, city):
        return False
        # passes all tests for this city
    return True