getResourceModifier for resources modified by uniques (#3372)

* added function getResourceModifier to civinfo and tied into cityInfo resource checks
pared down getTileResourceAmount function

* simplified function usage
This commit is contained in:
9kgsofrice 2020-11-30 19:54:54 +00:00 committed by GitHub
parent f59c9a8593
commit ea11c3fdf3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 8 deletions

View File

@ -176,7 +176,7 @@ class CityInfo {
for (tileInfo in getTiles().filter { it.resource != null }) { for (tileInfo in getTiles().filter { it.resource != null }) {
val resource = tileInfo.getTileResource() val resource = tileInfo.getTileResource()
val amount = getTileResourceAmount(tileInfo) val amount = getTileResourceAmount(tileInfo) * civInfo.getResourceModifier(resource)
if (amount > 0) cityResources.add(resource, amount, "Tiles") if (amount > 0) cityResources.add(resource, amount, "Tiles")
} }
@ -186,8 +186,8 @@ class CityInfo {
} }
for(unique in cityConstructions.builtBuildingUniqueMap.getUniques("Provides [] []")) { // E.G "Provides [1] [Iron]" for(unique in cityConstructions.builtBuildingUniqueMap.getUniques("Provides [] []")) { // E.G "Provides [1] [Iron]"
val resource = getRuleset().tileResources[unique.params[1]] val resource = getRuleset().tileResources[unique.params[1]]
if (resource != null) if(resource!=null){
cityResources.add(resource, unique.params[0].toInt(), "Buildings") cityResources.add(resource, unique.params[0].toInt() * civInfo.getResourceModifier(resource), "Buildings") }
} }
return cityResources return cityResources
@ -221,12 +221,7 @@ class CityInfo {
var amountToAdd = 1 var amountToAdd = 1
if (resource.resourceType == ResourceType.Strategic) { if (resource.resourceType == ResourceType.Strategic) {
amountToAdd = 2 amountToAdd = 2
if (civInfo.hasUnique("Quantity of strategic resources produced by the empire increased by 100%"))
amountToAdd *= 2
} }
for (unique in civInfo.getMatchingUniques("Double quantity of [] produced"))
if (unique.params[0] == resource.name)
amountToAdd *= 2
if (resource.resourceType == ResourceType.Luxury if (resource.resourceType == ResourceType.Luxury
&& containsBuildingUnique("Provides 1 extra copy of each improved luxury resource near this City")) && containsBuildingUnique("Provides 1 extra copy of each improved luxury resource near this City"))
amountToAdd *= 2 amountToAdd *= 2

View File

@ -18,6 +18,7 @@ import com.unciv.logic.trade.TradeEvaluation
import com.unciv.logic.trade.TradeRequest import com.unciv.logic.trade.TradeRequest
import com.unciv.models.ruleset.* import com.unciv.models.ruleset.*
import com.unciv.models.ruleset.tile.ResourceSupplyList import com.unciv.models.ruleset.tile.ResourceSupplyList
import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.ruleset.tile.TileResource import com.unciv.models.ruleset.tile.TileResource
import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.ruleset.unit.BaseUnit
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
@ -186,6 +187,18 @@ class CivilizationInfo {
return hashMap return hashMap
} }
fun getResourceModifier(resource: TileResource): Int {
var resourceModifier = 1
for (unique in getMatchingUniques("Double quantity of [] produced"))
if (unique.params[0] == resource.name)
resourceModifier *= 2
if (resource.resourceType == ResourceType.Strategic) {
if (hasUnique("Quantity of strategic resources produced by the empire increased by 100%"))
resourceModifier *= 2
}
return resourceModifier
}
fun hasResource(resourceName:String): Boolean = getCivResourcesByName()[resourceName]!!>0 fun hasResource(resourceName:String): Boolean = getCivResourcesByName()[resourceName]!!>0
fun getBuildingUniques(): Sequence<Unique> = cities.asSequence().flatMap { it.cityConstructions.builtBuildingUniqueMap.getAllUniques() } fun getBuildingUniques(): Sequence<Unique> = cities.asSequence().flatMap { it.cityConstructions.builtBuildingUniqueMap.getAllUniques() }