mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-29 06:51:30 -04:00
Added "Consumes [amount] [resource]" for improvements (#5129)
* Added "Consumes [amount] [resource]" for improvements * It now also works for placeable improvements * Made construction grayed out instead of disappear when no resources available
This commit is contained in:
parent
af20124e5d
commit
a4c520fd26
@ -269,10 +269,11 @@ class CityInfo {
|
||||
val amount = getTileResourceAmount(tileInfo) * civInfo.getResourceModifier(resource)
|
||||
if (amount > 0) cityResources.add(resource, amount, "Tiles")
|
||||
}
|
||||
|
||||
for (tileInfo in getTiles()) {
|
||||
if (tileInfo.improvement == null) continue
|
||||
val tileImprovement = tileInfo.getTileImprovement()
|
||||
for (unique in tileImprovement!!.uniqueObjects)
|
||||
for (unique in tileImprovement!!.uniqueObjects) {
|
||||
if (unique.placeholderText == "Provides [] []") {
|
||||
val resource = getRuleset().tileResources[unique.params[1]] ?: continue
|
||||
cityResources.add(
|
||||
@ -281,13 +282,24 @@ class CityInfo {
|
||||
"Tiles"
|
||||
)
|
||||
}
|
||||
if (unique.placeholderText == "Consumes [] []") {
|
||||
val resource = getRuleset().tileResources[unique.params[1]] ?: continue
|
||||
cityResources.add(
|
||||
resource,
|
||||
-1 * unique.params[0].toInt(),
|
||||
"Improvements"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (building in cityConstructions.getBuiltBuildings()) {
|
||||
for ((resourceName, amount) in building.getResourceRequirements()) {
|
||||
val resource = getRuleset().tileResources[resourceName]!!
|
||||
cityResources.add(resource, -amount, "Buildings")
|
||||
}
|
||||
}
|
||||
|
||||
for (unique in getLocalMatchingUniques("Provides [] []")) { // E.G "Provides [1] [Iron]"
|
||||
val resource = getRuleset().tileResources[unique.params[1]]
|
||||
if (resource != null) {
|
||||
|
@ -383,6 +383,10 @@ open class TileInfo {
|
||||
it.placeholderText == "Cannot be built on [] tiles until [] is discovered" &&
|
||||
matchesTerrainFilter(it.params[0]) && !civInfo.tech.isResearched(it.params[1])
|
||||
} -> false
|
||||
improvement.uniqueObjects.any {
|
||||
it.placeholderText == "Consumes [] []"
|
||||
&& civInfo.getCivResourcesByName()[it.params[1]]!! < it.params[0].toInt()
|
||||
} -> false
|
||||
else -> canImprovementBeBuiltHere(improvement, hasViewableResource(civInfo))
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.civilization.NotificationIcon
|
||||
import com.unciv.logic.civilization.PlayerType
|
||||
import com.unciv.logic.civilization.ReligionState
|
||||
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
|
||||
import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers
|
||||
import com.unciv.logic.map.MapUnit
|
||||
@ -585,11 +584,19 @@ object UnitActions {
|
||||
var uniquesToCheck = unit.getMatchingUniques("Can construct []")
|
||||
if (unit.religiousActionsUnitCanDo().all { unit.abilityUsesLeft[it] == unit.maxAbilityUses[it] })
|
||||
uniquesToCheck += unit.getMatchingUniques("Can construct [] if it hasn't used other actions yet")
|
||||
val civResources = unit.civInfo.getCivResourcesByName()
|
||||
|
||||
for (unique in uniquesToCheck) {
|
||||
val improvementName = unique.params[0]
|
||||
val improvement = tile.ruleset.tileImprovements[improvementName]
|
||||
?: continue
|
||||
|
||||
var resourcesAvailable = true
|
||||
if (improvement.uniqueObjects.any {
|
||||
it.placeholderText == "Consumes [] []" && civResources[unique.params[1]] ?: 0 < unique.params[0].toInt()
|
||||
})
|
||||
resourcesAvailable = false
|
||||
|
||||
finalActions += UnitAction(UnitActionType.Create,
|
||||
title = "Create [$improvementName]",
|
||||
action = {
|
||||
@ -609,8 +616,10 @@ object UnitActions {
|
||||
addStatsPerGreatPersonUsage(unit)
|
||||
unit.destroy()
|
||||
}.takeIf {
|
||||
unit.currentMovement > 0f && tile.canBuildImprovement(improvement, unit.civInfo)
|
||||
&& !tile.isImpassible() // Not 100% sure that this check is necessary...
|
||||
resourcesAvailable
|
||||
&& unit.currentMovement > 0f
|
||||
&& tile.canBuildImprovement(improvement, unit.civInfo)
|
||||
&& !tile.isImpassible() // Not 100% sure that this check is necessary...
|
||||
})
|
||||
}
|
||||
return finalActions
|
||||
|
Loading…
x
Reference in New Issue
Block a user