Resolved #1964 - Construction resource consumption is explicitly stated in construction picking and queue

This commit is contained in:
Yair Morgenstern 2020-03-29 14:50:40 +03:00
parent 806a0e2269
commit b0a74dfa86
5 changed files with 33 additions and 14 deletions

View file

@ -847,7 +847,6 @@ Armor =
City =
Missile =
WaterAircraftCarrier =
WaterMissileCarrier =
# Units

View file

@ -11,6 +11,7 @@ interface IConstruction : INamed {
fun isBuildable(construction: CityConstructions): Boolean
fun shouldBeDisplayed(construction: CityConstructions): Boolean
fun postBuildEvent(construction: CityConstructions, wasBought: Boolean = false): Boolean // Yes I'm hilarious.
fun getResource(): String?
fun canBePurchased(): Boolean
}
@ -65,4 +66,6 @@ open class PerpetualConstruction(override var name: String, val description: Str
throw Exception("Impossible!")
}
override fun getResource(): String? =null
}

View file

@ -397,6 +397,8 @@ class Building : NamedStats(), IConstruction{
return true
}
override fun getResource(): String? = requiredResource
fun isStatRelated(stat: Stat): Boolean {
if (get(stat) > 0) return true
if (getStatPercentageBonuses(null).get(stat)>0) return true

View file

@ -172,6 +172,8 @@ class BaseUnit : INamed, IConstruction {
return true
}
override fun getResource(): String? = requiredResource
fun getDirectUpgradeUnit(civInfo: CivilizationInfo):BaseUnit{
return civInfo.getEquivalentUnit(upgradesTo!!)
}

View file

@ -11,6 +11,7 @@ import com.unciv.logic.city.CityInfo
import com.unciv.logic.city.IConstruction
import com.unciv.logic.city.PerpetualConstruction
import com.unciv.models.UncivSound
import com.unciv.models.ruleset.Building
import com.unciv.models.stats.Stat
import com.unciv.models.translations.tr
import com.unciv.ui.cityscreen.ConstructionInfoTable.Companion.turnOrTurns
@ -133,16 +134,23 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
for (unit in city.getRuleset().units.values.filter { it.shouldBeDisplayed(cityConstructions) }) {
val useStoredProduction = !cityConstructions.isBeingConstructedOrEnqueued(unit.name)
val turnsToUnit = cityConstructions.turnsToConstruction(unit.name, useStoredProduction)
val productionButton = getProductionButton(unit.name,
unit.name.tr() + turnOrTurns(turnsToUnit),
var buttonText = unit.name.tr() + turnOrTurns(turnsToUnit)
if(unit.requiredResource != null)
buttonText += "\n"+"Consumes 1 [${unit.requiredResource}]".tr()
val productionButton = getProductionButton(unit,
buttonText,
unit.getRejectionReason(cityConstructions))
units.add(productionButton)
}
for (building in city.getRuleset().buildings.values.filter { it.shouldBeDisplayed(cityConstructions)}) {
val turnsToBuilding = cityConstructions.turnsToConstruction(building.name)
val productionTextButton = getProductionButton(building.name,
building.name.tr() + turnOrTurns(turnsToBuilding),
var buttonText = building.name.tr() + turnOrTurns(turnsToBuilding)
if(building.requiredResource != null)
buttonText += "\n"+"Consumes 1 [${building.requiredResource}]".tr()
val productionTextButton = getProductionButton(building,
buttonText,
building.getRejectionReason(cityConstructions)
)
if (building.isWonder) buildableWonders += productionTextButton
@ -152,7 +160,7 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
for (specialConstruction in PerpetualConstruction.perpetualConstructionsMap.values
.filter { it.shouldBeDisplayed(cityConstructions) }) {
specialConstructions += getProductionButton(specialConstruction.name,
specialConstructions += getProductionButton(specialConstruction,
"Produce [${specialConstruction.name}]".tr()
+ specialConstruction.getProductionTooltip(city))
}
@ -177,7 +185,12 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
val isFirstConstructionOfItsKind = cityConstructions.isFirstConstructionOfItsKind(constructionQueueIndex, name)
val turnsToComplete = cityConstructions.turnsToConstruction(name, isFirstConstructionOfItsKind)
val text = name.tr() + turnOrTurns(turnsToComplete)
var text = name.tr() + turnOrTurns(turnsToComplete)
val constructionResource = cityConstructions.getConstruction(name).getResource()
if(constructionResource != null)
text += "\n"+"Consumes 1 [$constructionResource]".tr()
table.defaults().pad(2f).minWidth(40f)
if(isFirstConstructionOfItsKind) table.add(getProgressBar(name)).minWidth(5f)
@ -212,30 +225,29 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
Color.BROWN.cpy().lerp(Color.WHITE, 0.5f), Color.WHITE)
}
private fun getProductionButton(construction: String, buttonText: String, rejectionReason: String = ""): Table {
private fun getProductionButton(construction: IConstruction, buttonText: String, rejectionReason: String = ""): Table {
val pickProductionButton = Table()
pickProductionButton.align(Align.left).pad(5f)
pickProductionButton.background = ImageGetter.getBackground(Color.BLACK)
pickProductionButton.touchable = Touchable.enabled
if (!isSelectedQueueEntry() && cityScreen.selectedConstruction != null && cityScreen.selectedConstruction!!.name == construction) {
if (!isSelectedQueueEntry() && cityScreen.selectedConstruction != null && cityScreen.selectedConstruction == construction) {
pickProductionButton.background = ImageGetter.getBackground(Color.GREEN.cpy().lerp(Color.BLACK, 0.5f))
}
pickProductionButton.add(getProgressBar(construction)).padRight(5f)
pickProductionButton.add(ImageGetter.getConstructionImage(construction).surroundWithCircle(40f)).padRight(10f)
pickProductionButton.add(buttonText.toLabel()).expandX().fillX().left()
pickProductionButton.add(getProgressBar(construction.name)).padRight(5f)
pickProductionButton.add(ImageGetter.getConstructionImage(construction.name).surroundWithCircle(40f)).padRight(10f)
pickProductionButton.add(buttonText.toLabel()).expandX().fillX().left().row()
// no rejection reason means we can build it!
if(rejectionReason != "") {
pickProductionButton.color = Color.GRAY
pickProductionButton.row()
pickProductionButton.add(rejectionReason.toLabel(Color.RED).apply{ setWrap(true)} )
.colspan(pickProductionButton.columns).fillX().left().padTop(2f)
}
pickProductionButton.onClick {
cityScreen.selectedConstruction = cityScreen.city.cityConstructions.getConstruction(construction)
cityScreen.selectedConstruction = construction
cityScreen.selectedTile = null
selectedQueueEntry = -2
cityScreen.update()
@ -243,6 +255,7 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
return pickProductionButton
}
private fun isSelectedQueueEntry(): Boolean = selectedQueueEntry > -2
private fun isSelectedCurrentConstruction(): Boolean = selectedQueueEntry == -1