mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-09 10:29:02 +07:00
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:
parent
ead83b912b
commit
291c546dec
@ -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 }
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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] */
|
||||
|
Loading…
Reference in New Issue
Block a user