mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-26 21:35:14 -04:00
Added "Consumes [amount] [resource]" unique to units
This commit is contained in:
parent
3d683c767a
commit
4104f72729
@ -65,7 +65,7 @@ object Automation {
|
||||
// This is so that the AI doesn't use all its aluminum on units and have none left for spaceship parts
|
||||
val aluminum = city.civInfo.getCivResourcesByName()["Aluminum"]
|
||||
if (aluminum != null && aluminum < 2) // mods may have no aluminum
|
||||
militaryUnits.filter { it.requiredResource != "Aluminum" }
|
||||
militaryUnits.filter { !it.getResourceRequirements().containsKey("Aluminum") }
|
||||
|
||||
val findWaterConnectedCitiesAndEnemies = BFS(city.getCenterTile()) { it.isWater || it.isCityCenter() }
|
||||
findWaterConnectedCitiesAndEnemies.stepToEnd()
|
||||
|
@ -80,11 +80,11 @@ object BattleDamage {
|
||||
.any { it.civInfo == civInfo && !it.type.isCivilian() && !it.type.isAirUnit() })
|
||||
modifiers["Discipline"] = 15
|
||||
|
||||
val requiredResource = combatant.unit.baseUnit.requiredResource
|
||||
if (requiredResource != null && civInfo.getCivResourcesByName()[requiredResource]!! < 0
|
||||
&& !civInfo.isBarbarian()) {
|
||||
val civResources = civInfo.getCivResourcesByName()
|
||||
for (resource in combatant.unit.baseUnit.getResourceRequirements().keys)
|
||||
if (civResources[resource]!! < 0 && !civInfo.isBarbarian())
|
||||
modifiers["Missing resource"] = -25
|
||||
}
|
||||
|
||||
|
||||
val nearbyCivUnits = combatant.unit.getTile().getTilesInDistance(2)
|
||||
.filter { it.civilianUnit?.civInfo == combatant.unit.civInfo }
|
||||
|
@ -157,9 +157,9 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) {
|
||||
}
|
||||
|
||||
for (dip in civInfo.diplomacy.values) newDetailedCivResources.add(dip.resourcesFromTrade())
|
||||
for (resource in civInfo.getCivUnits().mapNotNull { it.baseUnit.requiredResource }
|
||||
.map { civInfo.gameInfo.ruleSet.tileResources[it]!! })
|
||||
newDetailedCivResources.add(resource, -1, "Units")
|
||||
for (unit in civInfo.getCivUnits())
|
||||
for ((resource, amount) in unit.baseUnit.getResourceRequirements())
|
||||
newDetailedCivResources.add(civInfo.gameInfo.ruleSet.tileResources[resource]!!, -amount, "Units")
|
||||
civInfo.detailedCivResources = newDetailedCivResources
|
||||
}
|
||||
}
|
@ -118,9 +118,9 @@ class TradeEvaluation{
|
||||
val amountToBuyInOffer = min(amountWillingToBuy, offer.amount)
|
||||
|
||||
val canUseForBuildings = civInfo.cities
|
||||
.any { city -> city.cityConstructions.getBuildableBuildings().any { it.requiredResource == offer.name } }
|
||||
.any { city -> city.cityConstructions.getBuildableBuildings().any { it.getResourceRequirements().containsKey(offer.name) } }
|
||||
val canUseForUnits = civInfo.cities
|
||||
.any { city -> city.cityConstructions.getConstructableUnits().any { it.requiredResource == offer.name } }
|
||||
.any { city -> city.cityConstructions.getConstructableUnits().any { it.getResourceRequirements().containsKey(offer.name) } }
|
||||
if (!canUseForBuildings && !canUseForUnits) return 0
|
||||
|
||||
return 50 * amountToBuyInOffer
|
||||
@ -179,7 +179,7 @@ class TradeEvaluation{
|
||||
if (!civInfo.isAtWar()) return 50 * offer.amount
|
||||
|
||||
val canUseForUnits = civInfo.gameInfo.ruleSet.units.values
|
||||
.any { it.requiredResource==offer.name && it.isBuildable(civInfo) }
|
||||
.any { it.getResourceRequirements().containsKey(offer.name) && it.isBuildable(civInfo) }
|
||||
if (!canUseForUnits) return 50 * offer.amount
|
||||
|
||||
val amountLeft = civInfo.getCivResourcesByName()[offer.name]!!
|
||||
@ -245,8 +245,7 @@ class TradeEvaluation{
|
||||
val absoluteAdvantage = ourCombatStrength - theirCombatStrength
|
||||
val percentageAdvantage = absoluteAdvantage / theirCombatStrength.toFloat()
|
||||
return (absoluteAdvantage * percentageAdvantage).toInt() * 10
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
val absoluteAdvantage = theirCombatStrength - ourCombatStrength
|
||||
val percentageAdvantage = absoluteAdvantage / ourCombatStrength.toFloat()
|
||||
return -(absoluteAdvantage * percentageAdvantage).toInt() * 10
|
||||
|
@ -65,6 +65,7 @@ class Nation : INamed {
|
||||
// Same for Inca unique
|
||||
@Transient
|
||||
var ignoreHillMovementCost = false
|
||||
|
||||
@Transient
|
||||
var embarkDisembarkCosts1 = false
|
||||
|
||||
@ -93,8 +94,7 @@ class Nation : INamed {
|
||||
if (uniqueName != "") textList += uniqueName.tr() + ":"
|
||||
if (uniqueText != "") {
|
||||
textList += " " + uniqueText.tr()
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
textList += " " + uniques.joinToString(", ") { it.tr() }
|
||||
textList += ""
|
||||
}
|
||||
@ -155,8 +155,9 @@ class Nation : INamed {
|
||||
textList += " ${Fonts.range} " + "[${unit.range}] vs [${originalUnit.range}]".tr()
|
||||
if (unit.movement != originalUnit.movement)
|
||||
textList += " ${Fonts.movement} " + "[${unit.movement}] vs [${originalUnit.movement}]".tr()
|
||||
if (originalUnit.requiredResource != null && unit.requiredResource == null)
|
||||
textList += " " + "[${originalUnit.requiredResource}] not required".tr()
|
||||
for (resource in originalUnit.getResourceRequirements().keys)
|
||||
if (!unit.getResourceRequirements().containsKey(resource))
|
||||
textList += " " + "[$resource] not required".tr()
|
||||
for (unique in unit.uniques.filterNot { it in originalUnit.uniques })
|
||||
textList += " " + Translations.translateBonusOrPenalty(unique)
|
||||
for (unique in originalUnit.uniques.filterNot { it in unit.uniques })
|
||||
@ -165,8 +166,7 @@ class Nation : INamed {
|
||||
textList += " " + promotion.tr() + " (" + Translations.translateBonusOrPenalty(ruleset.unitPromotions[promotion]!!.effect) + ")"
|
||||
} else if (unit.replaces != null) {
|
||||
textList += unit.name.tr() + " - " + "Replaces [${unit.replaces}], which is not found in the ruleset!".tr()
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
textList += unit.name.tr()
|
||||
textList += " " + unit.getDescription(true).split("\n").joinToString("\n ")
|
||||
}
|
||||
|
@ -252,8 +252,9 @@ class Ruleset {
|
||||
lines += "${unit.name} requires tech ${unit.requiredTech} which does not exist!"
|
||||
if (unit.obsoleteTech != null && !technologies.containsKey(unit.obsoleteTech!!))
|
||||
lines += "${unit.name} obsoletes at tech ${unit.obsoleteTech} which does not exist!"
|
||||
if (unit.requiredResource != null && !tileResources.containsKey(unit.requiredResource!!))
|
||||
lines += "${unit.name} requires resource ${unit.requiredResource} which does not exist!"
|
||||
for (resource in unit.getResourceRequirements().keys)
|
||||
if (!tileResources.containsKey(resource))
|
||||
lines += "${unit.name} requires resource $resource which does not exist!"
|
||||
if (unit.upgradesTo != null && !units.containsKey(unit.upgradesTo!!))
|
||||
lines += "${unit.name} upgrades to unit ${unit.upgradesTo} which does not exist!"
|
||||
if (unit.replaces != null && !units.containsKey(unit.replaces!!))
|
||||
|
@ -37,7 +37,7 @@ class TileResource : NamedStats() {
|
||||
stringBuilder.appendln("{Buildings that consume this resource}: ".tr()
|
||||
+ buildingsThatConsumeThis.joinToString { it.name.tr() })
|
||||
|
||||
val unitsThatConsumeThis = ruleset.units.values.filter { it.requiredResource == name }
|
||||
val unitsThatConsumeThis = ruleset.units.values.filter { it.getResourceRequirements().containsKey(name) }
|
||||
if (unitsThatConsumeThis.isNotEmpty())
|
||||
stringBuilder.appendln("{Units that consume this resource}: ".tr()
|
||||
+ unitsThatConsumeThis.joinToString { it.name.tr() })
|
||||
|
@ -55,7 +55,10 @@ class BaseUnit : INamed, IConstruction {
|
||||
|
||||
fun getDescription(forPickerScreen: Boolean): String {
|
||||
val sb = StringBuilder()
|
||||
if (requiredResource != null) sb.appendln("Consumes 1 [{$requiredResource}]".tr())
|
||||
for ((resource, amount) in getResourceRequirements()) {
|
||||
if (amount == 1) sb.appendln("Consumes 1 [$resource]".tr())
|
||||
else sb.appendln("Consumes [$amount]] [$resource]".tr())
|
||||
}
|
||||
if (!forPickerScreen) {
|
||||
if (uniqueTo != null) sb.appendln("Unique to [$uniqueTo], replaces [$replaces]".tr())
|
||||
else sb.appendln("{Cost}: $cost".tr())
|
||||
@ -161,7 +164,13 @@ class BaseUnit : INamed, IConstruction {
|
||||
if (civInfo.cities.none { it.cityConstructions.containsBuildingOrEquivalent(filter) }) return unique.text // Wonder is not built
|
||||
} else if (!civInfo.policies.adoptedPolicies.contains(filter)) return "Policy is not adopted"
|
||||
}
|
||||
if (requiredResource != null && !civInfo.hasResource(requiredResource!!) && !civInfo.gameInfo.gameParameters.godMode) return "Consumes 1 [$requiredResource]"
|
||||
|
||||
for ((resource, amount) in getResourceRequirements())
|
||||
if (civInfo.getCivResourcesByName()[resource]!! < amount) {
|
||||
if (amount == 1) return "Consumes 1 [$resource]" // Again, to preserve existing translations
|
||||
else return "Consumes [$amount] [$resource]"
|
||||
}
|
||||
|
||||
if (uniques.contains(Constants.settlerUnique) && civInfo.isCityState()) return "No settler for city-states"
|
||||
if (uniques.contains(Constants.settlerUnique) && civInfo.isOneCityChallenger()) return "No settler for players in One City Challenge"
|
||||
return ""
|
||||
|
@ -124,8 +124,10 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
|
||||
val useStoredProduction = !cityConstructions.isBeingConstructedOrEnqueued(unit.name)
|
||||
val turnsToUnit = cityConstructions.turnsToConstruction(unit.name, useStoredProduction)
|
||||
var buttonText = unit.name.tr() + turnOrTurns(turnsToUnit)
|
||||
if (unit.requiredResource != null)
|
||||
buttonText += "\n" + "Consumes 1 [${unit.requiredResource}]".tr()
|
||||
for ((resource, amount) in unit.getResourceRequirements()) {
|
||||
if (amount == 1) buttonText += "\n" + "Consumes 1 [$resource]".tr()
|
||||
else buttonText += "\n" + "Consumes [$amount] [$resource]".tr()
|
||||
}
|
||||
|
||||
constructionButtonDTOList.add(ConstructionButtonDTO(unit,
|
||||
buttonText,
|
||||
|
Loading…
x
Reference in New Issue
Block a user