mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-14 01:39:40 +07:00
Add IHasUniques.era() (#10593)
* Update IHasUniques.kt * Update IHasUniques.kt * Update IConstruction.kt * Update IHasUniques.kt * Update CivInfoTransientCache.kt * Update UnitUpgradeManager.kt * Update WonderOverviewTab.kt * Update IHasUniques.kt
This commit is contained in:
@ -47,8 +47,8 @@ class CivInfoTransientCache(val civInfo: Civilization) {
|
|||||||
val applicableBuildings = ruleset.buildings.values.filter { it.requiresResource(resource, StateForConditionals.IgnoreConditionals) && civInfo.getEquivalentBuilding(it) == it }
|
val applicableBuildings = ruleset.buildings.values.filter { it.requiresResource(resource, StateForConditionals.IgnoreConditionals) && civInfo.getEquivalentBuilding(it) == it }
|
||||||
val applicableUnits = ruleset.units.values.filter { it.requiresResource(resource, StateForConditionals.IgnoreConditionals) && civInfo.getEquivalentUnit(it) == it }
|
val applicableUnits = ruleset.units.values.filter { it.requiresResource(resource, StateForConditionals.IgnoreConditionals) && civInfo.getEquivalentUnit(it) == it }
|
||||||
|
|
||||||
val lastEraForBuilding = applicableBuildings.maxOfOrNull { ruleset.eras[ruleset.technologies[it.requiredTech]?.era()]?.eraNumber ?: 0 }
|
val lastEraForBuilding = applicableBuildings.maxOfOrNull { it.era(ruleset)?.eraNumber ?: 0 }
|
||||||
val lastEraForUnit = applicableUnits.maxOfOrNull { ruleset.eras[ruleset.technologies[it.requiredTech]?.era()]?.eraNumber ?: 0 }
|
val lastEraForUnit = applicableUnits.maxOfOrNull { it.era(ruleset)?.eraNumber ?: 0 }
|
||||||
|
|
||||||
if (lastEraForBuilding != null)
|
if (lastEraForBuilding != null)
|
||||||
lastEraResourceUsedForBuilding[resource] = lastEraForBuilding
|
lastEraResourceUsedForBuilding[resource] = lastEraForBuilding
|
||||||
|
@ -102,7 +102,7 @@ class UnitUpgradeManager(val unit:MapUnit) {
|
|||||||
// do clamping and rounding here so upgrading stepwise costs the same as upgrading far down the chain
|
// do clamping and rounding here so upgrading stepwise costs the same as upgrading far down the chain
|
||||||
var stepCost = constants.base
|
var stepCost = constants.base
|
||||||
stepCost += (constants.perProduction * (baseUnit.cost - currentUnit.cost)).coerceAtLeast(0f)
|
stepCost += (constants.perProduction * (baseUnit.cost - currentUnit.cost)).coerceAtLeast(0f)
|
||||||
val era = ruleset.eras[ruleset.technologies[baseUnit.requiredTech]?.era()]
|
val era = baseUnit.era(ruleset)
|
||||||
if (era != null)
|
if (era != null)
|
||||||
stepCost *= (1f + era.eraNumber * constants.eraMultiplier)
|
stepCost *= (1f + era.eraNumber * constants.eraMultiplier)
|
||||||
stepCost = (stepCost * civModifier).pow(constants.exponent)
|
stepCost = (stepCost * civModifier).pow(constants.exponent)
|
||||||
|
@ -34,7 +34,7 @@ interface INonPerpetualConstruction : IConstruction, INamed, IHasUniques {
|
|||||||
@Deprecated("The functionality provided by the requiredTech field is provided by the OnlyAvailableWhen unique.")
|
@Deprecated("The functionality provided by the requiredTech field is provided by the OnlyAvailableWhen unique.")
|
||||||
var requiredTech: String?
|
var requiredTech: String?
|
||||||
|
|
||||||
fun requiredTechs(): Sequence<String> = if (requiredTech == null) sequenceOf() else sequenceOf(requiredTech!!)
|
override fun legacyRequiredTechs(): Sequence<String> = if (requiredTech == null) sequenceOf() else sequenceOf(requiredTech!!)
|
||||||
|
|
||||||
fun getProductionCost(civInfo: Civilization): Int
|
fun getProductionCost(civInfo: Civilization): Int
|
||||||
fun getStatBuyCost(city: City, stat: Stat): Int?
|
fun getStatBuyCost(city: City, stat: Stat): Int?
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.unciv.models.ruleset.unique
|
package com.unciv.models.ruleset.unique
|
||||||
|
|
||||||
|
import com.unciv.models.ruleset.Ruleset
|
||||||
|
import com.unciv.models.ruleset.tech.Era
|
||||||
|
import com.unciv.models.ruleset.tech.Technology
|
||||||
import com.unciv.models.stats.INamed
|
import com.unciv.models.stats.INamed
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,4 +45,22 @@ interface IHasUniques : INamed {
|
|||||||
|
|
||||||
fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) =
|
fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) =
|
||||||
getMatchingUniques(uniqueType.placeholderText, stateForConditionals).any()
|
getMatchingUniques(uniqueType.placeholderText, stateForConditionals).any()
|
||||||
|
|
||||||
|
fun techsRequiredByUniques(): Sequence<String> {
|
||||||
|
val uniquesForWhenThisIsAvailable: Sequence<Unique> = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals)
|
||||||
|
val conditionalsForWhenThisIsAvailable: Sequence<Unique> = uniquesForWhenThisIsAvailable.flatMap{ it.conditionals }
|
||||||
|
val techRequiringConditionalsForWhenThisIsAvailable: Sequence<Unique> = conditionalsForWhenThisIsAvailable.filter{ it.isOfType(UniqueType.ConditionalTech) }
|
||||||
|
return techRequiringConditionalsForWhenThisIsAvailable.map{ it.params[0] }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun legacyRequiredTechs(): Sequence<String> = sequenceOf()
|
||||||
|
|
||||||
|
fun requiredTechs(): Sequence<String> = legacyRequiredTechs() + techsRequiredByUniques()
|
||||||
|
|
||||||
|
fun requiredTechnologies(ruleset: Ruleset): Sequence<Technology> =
|
||||||
|
requiredTechs().map{ ruleset.technologies[it]!! }
|
||||||
|
|
||||||
|
fun era(ruleset: Ruleset): Era? =
|
||||||
|
requiredTechnologies(ruleset).map{ it.era() }.map{ ruleset.eras[it]!! }.maxByOrNull{ it.eraNumber }
|
||||||
|
// This will return null only if requiredTechnologies() is empty.
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ class WonderInfo {
|
|||||||
val wonderEraMap: Map<String, Era?> =
|
val wonderEraMap: Map<String, Era?> =
|
||||||
ruleSet.buildings.values.asSequence()
|
ruleSet.buildings.values.asSequence()
|
||||||
.filter { it.isWonder }
|
.filter { it.isWonder }
|
||||||
.associate { it.name to ruleSet.eras[ruleSet.technologies[it.requiredTech]?.era()] }
|
.associate { it.name to it.era(ruleSet) }
|
||||||
|
|
||||||
// Maps all World Wonders by their position in sort order to their name
|
// Maps all World Wonders by their position in sort order to their name
|
||||||
val allWonderMap: Map<Int, String> =
|
val allWonderMap: Map<Int, String> =
|
||||||
|
Reference in New Issue
Block a user