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