Fixed #362 (Cannot upgrade units at 0 resource)

Great improvements remove terrain features
This commit is contained in:
Yair Morgenstern 2018-12-28 10:09:57 +02:00
parent ec9d23a774
commit 48efb4dcd2
2 changed files with 16 additions and 14 deletions

View file

@ -109,9 +109,7 @@ class WorkerAutomation(val unit: MapUnit) {
// which is why we DON'T calculate this for every possible tile in the radius, // which is why we DON'T calculate this for every possible tile in the radius,
// but only for the tile that's about to be chosen. // but only for the tile that's about to be chosen.
val selectedTile = workableTiles.firstOrNull{ val selectedTile = workableTiles.firstOrNull{
unit.movementAlgs() unit.movementAlgs().canReach(it) }
.getShortestPath(workableTiles.first())
.isNotEmpty()}
if (selectedTile != null if (selectedTile != null
&& getPriority(selectedTile, unit.civInfo)>1 && getPriority(selectedTile, unit.civInfo)>1

View file

@ -24,14 +24,6 @@ class UnitAction(var name: String, var canAct:Boolean, var action:()->Unit){
class UnitActions { class UnitActions {
private fun constructImprovementAndDestroyUnit(unit:MapUnit, improvementName: String): () -> Unit {
return {
unit.getTile().improvement = improvementName
unit.destroy()
}
}
fun getUnitActions(unit:MapUnit,worldScreen: WorldScreen): List<UnitAction> { fun getUnitActions(unit:MapUnit,worldScreen: WorldScreen): List<UnitAction> {
val tile = unit.getTile() val tile = unit.getTile()
val unitTable = worldScreen.bottomBar.unitTable val unitTable = worldScreen.bottomBar.unitTable
@ -75,7 +67,15 @@ class UnitActions {
while (upgradedUnit.obsoleteTech!=null && unit.civInfo.tech.isResearched(upgradedUnit.obsoleteTech!!)) while (upgradedUnit.obsoleteTech!=null && unit.civInfo.tech.isResearched(upgradedUnit.obsoleteTech!!))
upgradedUnit = upgradedUnit.getUpgradeUnit(unit.civInfo) upgradedUnit = upgradedUnit.getUpgradeUnit(unit.civInfo)
if (upgradedUnit.isBuildable(unit.civInfo)) { // We need to remove the unit from the civ for this check,
// because if the unit requires, say, horses, and so does its upgrade,
// and the civ currently has 0 horses,
// if we don;t remove the unit before the check it's return false!
unit.civInfo.removeUnit(unit)
val canUpgrade = upgradedUnit.isBuildable(unit.civInfo)
unit.civInfo.addUnit(unit)
if (canUpgrade) {
var goldCostOfUpgrade = (upgradedUnit.cost - unit.baseUnit().cost) * 2 + 10 var goldCostOfUpgrade = (upgradedUnit.cost - unit.baseUnit().cost) * 2 + 10
if (unit.civInfo.policies.isAdopted("Professional Army")) goldCostOfUpgrade = (goldCostOfUpgrade * 0.66f).toInt() if (unit.civInfo.policies.isAdopted("Professional Army")) goldCostOfUpgrade = (goldCostOfUpgrade * 0.66f).toInt()
actionList += UnitAction("Upgrade to [${upgradedUnit.name}] ([$goldCostOfUpgrade] gold)", actionList += UnitAction("Upgrade to [${upgradedUnit.name}] ([$goldCostOfUpgrade] gold)",
@ -148,8 +148,12 @@ class UnitActions {
for(unique in unit.getUniques().filter { it.startsWith("Can build improvement: ") }){ for(unique in unit.getUniques().filter { it.startsWith("Can build improvement: ") }){
val improvementName = unique.replace("Can build improvement: ","") val improvementName = unique.replace("Can build improvement: ","")
actionList += UnitAction("Create [$improvementName]", actionList += UnitAction("Create [$improvementName]",
unit.currentMovement != 0f && !tile.isCityCenter(), unit.currentMovement != 0f && !tile.isCityCenter()
constructImprovementAndDestroyUnit(unit, improvementName)).sound("chimes") ) {
unit.getTile().terrainFeature=null // remove forest/jungle/marsh
unit.getTile().improvement = improvementName
unit.destroy()
}.sound("chimes")
} }