mirror of
https://github.com/yairm210/Unciv.git
synced 2025-08-03 20:48:49 -04:00
perf: Calculate resource modifiers *once* when calculating resources
This commit is contained in:
parent
b6414aef9d
commit
d9deb12df9
@ -90,7 +90,7 @@ class City : IsPartOfGameInfoSerialization, INamed {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var cityAIFocus: String = CityFocus.NoFocus.name
|
var cityAIFocus: String = CityFocus.NoFocus.name
|
||||||
fun getCityFocus() = CityFocus.values().firstOrNull { it.name == cityAIFocus } ?: CityFocus.NoFocus
|
fun getCityFocus() = CityFocus.entries.firstOrNull { it.name == cityAIFocus } ?: CityFocus.NoFocus
|
||||||
fun setCityFocus(cityFocus: CityFocus){ cityAIFocus = cityFocus.name }
|
fun setCityFocus(cityFocus: CityFocus){ cityAIFocus = cityFocus.name }
|
||||||
|
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ class City : IsPartOfGameInfoSerialization, INamed {
|
|||||||
|
|
||||||
fun getRuleset() = civ.gameInfo.ruleset
|
fun getRuleset() = civ.gameInfo.ruleset
|
||||||
|
|
||||||
fun getResourcesGeneratedByCity() = CityResources.getResourcesGeneratedByCity(this)
|
fun getResourcesGeneratedByCity(civResourceModifiers: HashMap<String, Float>) = CityResources.getResourcesGeneratedByCity(this, civResourceModifiers)
|
||||||
fun getAvailableResourceAmount(resourceName: String) = CityResources.getAvailableResourceAmount(this, resourceName)
|
fun getAvailableResourceAmount(resourceName: String) = CityResources.getAvailableResourceAmount(this, resourceName)
|
||||||
|
|
||||||
fun isGrowing() = foodForNextTurn() > 0
|
fun isGrowing() = foodForNextTurn() > 0
|
||||||
|
@ -9,14 +9,9 @@ import com.unciv.models.ruleset.unique.UniqueType
|
|||||||
object CityResources {
|
object CityResources {
|
||||||
|
|
||||||
/** Returns ALL resources, city-wide and civ-wide */
|
/** Returns ALL resources, city-wide and civ-wide */
|
||||||
fun getResourcesGeneratedByCity(city: City): ResourceSupplyList {
|
fun getResourcesGeneratedByCity(city: City, resourceModifiers: HashMap<String, Float>): ResourceSupplyList {
|
||||||
val resourceModifers = HashMap<String, Float>()
|
val cityResources = getResourcesGeneratedByCityNotIncludingBuildings(city, resourceModifiers)
|
||||||
for (resource in city.civ.gameInfo.ruleset.tileResources.values)
|
addCityResourcesGeneratedFromUniqueBuildings(city, cityResources, resourceModifiers)
|
||||||
resourceModifers[resource.name] = city.civ.getResourceModifier(resource)
|
|
||||||
|
|
||||||
val cityResources = getResourcesGeneratedByCityNotIncludingBuildings(city, resourceModifers)
|
|
||||||
addCityResourcesGeneratedFromUniqueBuildings(city, cityResources, resourceModifers)
|
|
||||||
|
|
||||||
return cityResources
|
return cityResources
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,6 +490,14 @@ class Civilization : IsPartOfGameInfoSerialization {
|
|||||||
return getCivResourcesByName()[resourceName] ?: 0
|
return getCivResourcesByName()[resourceName] ?: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets modifiers for ALL resources */
|
||||||
|
fun getResourceModifiers(): HashMap<String, Float> {
|
||||||
|
val resourceModifers = HashMap<String, Float>()
|
||||||
|
for (resource in gameInfo.ruleset.tileResources.values)
|
||||||
|
resourceModifers[resource.name] = getResourceModifier(resource)
|
||||||
|
return resourceModifers
|
||||||
|
}
|
||||||
|
|
||||||
fun getResourceModifier(resource: TileResource): Float {
|
fun getResourceModifier(resource: TileResource): Float {
|
||||||
var resourceModifier = 1f
|
var resourceModifier = 1f
|
||||||
for (unique in getMatchingUniques(UniqueType.DoubleResourceProduced))
|
for (unique in getMatchingUniques(UniqueType.DoubleResourceProduced))
|
||||||
|
@ -722,9 +722,10 @@ class CityStateFunctions(val civInfo: Civilization) {
|
|||||||
|
|
||||||
fun getCityStateResourcesForAlly() = ResourceSupplyList().apply {
|
fun getCityStateResourcesForAlly() = ResourceSupplyList().apply {
|
||||||
// TODO: City-states don't give allies resources from civ-wide uniques!
|
// TODO: City-states don't give allies resources from civ-wide uniques!
|
||||||
|
val civResourceModifiers = civInfo.getResourceModifiers()
|
||||||
for (city in civInfo.cities) {
|
for (city in civInfo.cities) {
|
||||||
// IGNORE the fact that they consume their own resources - #4769
|
// IGNORE the fact that they consume their own resources - #4769
|
||||||
addPositiveByResource(city.getResourcesGeneratedByCity(), Constants.cityStates)
|
addPositiveByResource(city.getResourcesGeneratedByCity(civResourceModifiers), Constants.cityStates)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +316,8 @@ class CivInfoTransientCache(val civInfo: Civilization) {
|
|||||||
|
|
||||||
fun updateCivResources() {
|
fun updateCivResources() {
|
||||||
val newDetailedCivResources = ResourceSupplyList()
|
val newDetailedCivResources = ResourceSupplyList()
|
||||||
for (city in civInfo.cities) newDetailedCivResources.add(city.getResourcesGeneratedByCity())
|
val resourceModifers = civInfo.getResourceModifiers()
|
||||||
|
for (city in civInfo.cities) newDetailedCivResources.add(city.getResourcesGeneratedByCity(resourceModifers))
|
||||||
|
|
||||||
if (!civInfo.isCityState) {
|
if (!civInfo.isCityState) {
|
||||||
// First we get all these resources of each city state separately
|
// First we get all these resources of each city state separately
|
||||||
|
@ -154,7 +154,7 @@ class ResourceTests {
|
|||||||
tile.improvement = "Mine"
|
tile.improvement = "Mine"
|
||||||
|
|
||||||
// when
|
// when
|
||||||
val cityResources = city.getResourcesGeneratedByCity()
|
val cityResources = city.getResourcesGeneratedByCity(civInfo.getResourceModifiers())
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(1, cityResources.size)
|
assertEquals(1, cityResources.size)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user