mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-22 10:54:19 -04:00
chore(purity): resource modifiers
This commit is contained in:
parent
11de0ae4a3
commit
8e59f9a8f9
@ -48,20 +48,13 @@ allprojects {
|
||||
apply(plugin = "io.github.yairm210.purity-plugin")
|
||||
configure<yairm210.purity.PurityConfiguration>{
|
||||
wellKnownPureFunctions = setOf(
|
||||
"com.unciv.logic.civilization.diplomacy.RelationshipLevel.compareTo",
|
||||
"kotlin.math.max",
|
||||
"kotlin.math.min",
|
||||
"kotlin.math.abs",
|
||||
"kotlin.to",
|
||||
"kotlin.internal.ir.noWhenBranchMatchedException",
|
||||
)
|
||||
wellKnownReadonlyFunctions = setOf(
|
||||
// Looks like the Collection.contains is not considered overridden :thunk:
|
||||
"com.badlogic.gdx.math.Vector2.len",
|
||||
"com.badlogic.gdx.math.Vector2.cpy",
|
||||
"java.util.AbstractCollection.contains",
|
||||
"java.util.AbstractCollection.isEmpty",
|
||||
"java.util.AbstractCollection.iterator",
|
||||
"java.util.AbstractList.get",
|
||||
)
|
||||
wellKnownPureClasses = setOf(
|
||||
)
|
||||
|
@ -28,7 +28,6 @@ import com.unciv.models.stats.GameResource
|
||||
import com.unciv.models.stats.INamed
|
||||
import com.unciv.models.stats.Stat
|
||||
import com.unciv.models.stats.SubStat
|
||||
import yairm210.purity.annotations.LocalState
|
||||
import yairm210.purity.annotations.Readonly
|
||||
import java.util.UUID
|
||||
import kotlin.math.roundToInt
|
||||
@ -210,7 +209,7 @@ class City : IsPartOfGameInfoSerialization, INamed {
|
||||
|
||||
@Readonly fun getRuleset() = civ.gameInfo.ruleset
|
||||
|
||||
fun getResourcesGeneratedByCity(civResourceModifiers: HashMap<String, Float>) = CityResources.getResourcesGeneratedByCity(this, civResourceModifiers)
|
||||
fun getResourcesGeneratedByCity(civResourceModifiers: Map<String, Float>) = CityResources.getResourcesGeneratedByCity(this, civResourceModifiers)
|
||||
fun getAvailableResourceAmount(resourceName: String) = CityResources.getAvailableResourceAmount(this, resourceName)
|
||||
|
||||
@Readonly fun isGrowing() = foodForNextTurn() > 0
|
||||
|
@ -5,12 +5,11 @@ import com.unciv.models.ruleset.tile.ResourceSupplyList
|
||||
import com.unciv.models.ruleset.tile.ResourceType
|
||||
import com.unciv.models.ruleset.unique.GameContext
|
||||
import com.unciv.models.ruleset.unique.UniqueType
|
||||
import yairm210.purity.annotations.Readonly
|
||||
|
||||
object CityResources {
|
||||
|
||||
/** Returns ALL resources, city-wide and civ-wide */
|
||||
fun getResourcesGeneratedByCity(city: City, resourceModifiers: HashMap<String, Float>): ResourceSupplyList {
|
||||
fun getResourcesGeneratedByCity(city: City, resourceModifiers: Map<String, Float>): ResourceSupplyList {
|
||||
val cityResources = getResourcesGeneratedByCityNotIncludingBuildings(city, resourceModifiers)
|
||||
addCityResourcesGeneratedFromUniqueBuildings(city, cityResources, resourceModifiers)
|
||||
return cityResources
|
||||
@ -35,7 +34,7 @@ object CityResources {
|
||||
}
|
||||
|
||||
|
||||
private fun getResourcesGeneratedByCityNotIncludingBuildings(city: City, resourceModifers: HashMap<String, Float>): ResourceSupplyList {
|
||||
private fun getResourcesGeneratedByCityNotIncludingBuildings(city: City, resourceModifers: Map<String, Float>): ResourceSupplyList {
|
||||
val cityResources = ResourceSupplyList()
|
||||
|
||||
addResourcesFromTiles(city, resourceModifers, cityResources)
|
||||
@ -54,7 +53,7 @@ object CityResources {
|
||||
return cityResources
|
||||
}
|
||||
|
||||
private fun addCityResourcesGeneratedFromUniqueBuildings(city: City, cityResources: ResourceSupplyList, resourceModifer: HashMap<String, Float>) {
|
||||
private fun addCityResourcesGeneratedFromUniqueBuildings(city: City, cityResources: ResourceSupplyList, resourceModifer: Map<String, Float>) {
|
||||
for (unique in city.getMatchingUniques(UniqueType.ProvidesResources, city.state, false)) { // E.G "Provides [1] [Iron]"
|
||||
val resource = city.getRuleset().tileResources[unique.params[1]]
|
||||
?: continue
|
||||
@ -75,7 +74,7 @@ object CityResources {
|
||||
return getCityResourcesAvailableToCity(city).asSequence().filter { it.resource == resource }.sumOf { it.amount }
|
||||
}
|
||||
|
||||
private fun addResourcesFromTiles(city: City, resourceModifer: HashMap<String, Float>, cityResources: ResourceSupplyList) {
|
||||
private fun addResourcesFromTiles(city: City, resourceModifer: Map<String, Float>, cityResources: ResourceSupplyList) {
|
||||
for (tileInfo in city.getTiles().filter { it.resource != null }) {
|
||||
val resource = tileInfo.tileResource
|
||||
val amount = getTileResourceAmount(city, tileInfo) * resourceModifer[resource.name]!!
|
||||
@ -83,7 +82,7 @@ object CityResources {
|
||||
}
|
||||
}
|
||||
|
||||
private fun addResourceFromUniqueImprovedTiles(city: City, cityResources: ResourceSupplyList, resourceModifer: HashMap<String, Float>) {
|
||||
private fun addResourceFromUniqueImprovedTiles(city: City, cityResources: ResourceSupplyList, resourceModifer: Map<String, Float>) {
|
||||
for (tileInfo in city.getTiles().filter { it.getUnpillagedImprovement() != null }) {
|
||||
val gameContext = GameContext(city.civ, city, tile = tileInfo)
|
||||
val tileImprovement = tileInfo.getUnpillagedTileImprovement()
|
||||
|
@ -494,12 +494,9 @@ class Civilization : IsPartOfGameInfoSerialization {
|
||||
}
|
||||
|
||||
/** 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
|
||||
}
|
||||
@Readonly
|
||||
fun getResourceModifiers(): Map<String, Float> =
|
||||
gameInfo.ruleset.tileResources.values.associate { it.name to getResourceModifier(it) }
|
||||
|
||||
/**
|
||||
* Returns the resource production modifier as a multiplier.
|
||||
@ -509,6 +506,7 @@ class Civilization : IsPartOfGameInfoSerialization {
|
||||
* @param resource The resource for which to calculate the modifier.
|
||||
* @return The production modifier as a multiplier.
|
||||
*/
|
||||
@Readonly
|
||||
fun getResourceModifier(resource: TileResource): Float {
|
||||
var finalModifier = 1f
|
||||
|
||||
|
@ -197,6 +197,7 @@ class TileResource : RulesetStatsObject(), GameResource {
|
||||
return null
|
||||
}
|
||||
|
||||
@Readonly
|
||||
fun matchesFilter(filter: String, state: GameContext? = null): Boolean =
|
||||
MultiFilter.multiFilter(filter, {
|
||||
matchesSingleFilter(filter) ||
|
||||
@ -204,6 +205,7 @@ class TileResource : RulesetStatsObject(), GameResource {
|
||||
state == null && hasTagUnique(filter)
|
||||
})
|
||||
|
||||
@Readonly
|
||||
fun matchesSingleFilter(filter: String) = when (filter) {
|
||||
name -> true
|
||||
"any" -> true
|
||||
|
Loading…
x
Reference in New Issue
Block a user