Performance improvements

- use existing map for building resource check, instead of iterating over uniques
- remove one retrieval for UniqueMap.addUnique

Idea for future improvement: setTerrainFeatures currently populates a UniqueMap for each tile. MANY tiles share the same set of features...
This commit is contained in:
Yair Morgenstern 2023-06-18 00:45:34 +03:00
parent ead83b912b
commit 291c546dec
3 changed files with 6 additions and 6 deletions

View File

@ -42,6 +42,7 @@ class CivInfoTransientCache(val civInfo: Civilization) {
fun setTransients(){
val ruleset = civInfo.gameInfo.ruleset
for (resource in ruleset.tileResources.values.asSequence().filter { it.resourceType == ResourceType.Strategic }.map { it.name }) {
val applicableBuildings = ruleset.buildings.values.filter { it.requiresResource(resource) && civInfo.getEquivalentBuilding(it) == it }
val applicableUnits = ruleset.units.values.filter { it.requiresResource(resource) && civInfo.getEquivalentUnit(it) == it }

View File

@ -775,10 +775,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
}
override fun requiresResource(resource: String): Boolean {
if (requiredResource == resource) return true
for (unique in getMatchingUniques(UniqueType.ConsumesResources)) {
if (unique.params[1] == resource) return true
}
if (resourceRequirementsInternal.contains(resource)) return true
for (unique in getMatchingUniques(UniqueType.CostsResources)) {
if (unique.params[1] == resource) return true
}

View File

@ -355,8 +355,10 @@ class UniqueMap: HashMap<String, ArrayList<Unique>>() {
/** Adds one [unique] unless it has a ConditionalTimedUnique conditional */
fun addUnique(unique: Unique) {
if (unique.conditionals.any { it.type == UniqueType.ConditionalTimedUnique }) return
if (!containsKey(unique.placeholderText)) this[unique.placeholderText] = ArrayList()
this[unique.placeholderText]!!.add(unique)
val existingArrayList = get(unique.placeholderText)
if (existingArrayList != null) existingArrayList.add(unique)
else this[unique.placeholderText] = arrayListOf(unique)
}
/** Calls [addUnique] on each item from [uniques] */