mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-22 22:00:24 +07:00
"Can instantly construct a [improvementFilter] improvement" works with improvementFilter
This commit is contained in:
@ -227,45 +227,43 @@ object UnitActionsFromUniques {
|
|||||||
val civResources = unit.civ.getCivResourcesByName()
|
val civResources = unit.civ.getCivResourcesByName()
|
||||||
|
|
||||||
for (unique in uniquesToCheck) {
|
for (unique in uniquesToCheck) {
|
||||||
// Skip actions with a "[amount] extra times" conditional - these are treated in addTriggerUniqueActions instead
|
val improvementFilter = unique.params[0]
|
||||||
val improvementName = unique.params[0]
|
val improvements = tile.ruleset.tileImprovements.values.filter { it.matchesFilter(improvementFilter) }
|
||||||
val improvement = tile.ruleset.tileImprovements[improvementName]
|
|
||||||
?: continue
|
|
||||||
|
|
||||||
// Try to skip Improvements we can never build
|
for (improvement in improvements) {
|
||||||
// (getImprovementBuildingProblems catches those so the button is always disabled, but it nevertheless looks nicer)
|
// Try to skip Improvements we can never build
|
||||||
if (tile.improvementFunctions.getImprovementBuildingProblems(improvement, unit.civ).any { it.permanent })
|
// (getImprovementBuildingProblems catches those so the button is always disabled, but it nevertheless looks nicer)
|
||||||
continue
|
if (tile.improvementFunctions.getImprovementBuildingProblems(improvement, unit.civ).any { it.permanent })
|
||||||
|
continue
|
||||||
|
|
||||||
val resourcesAvailable = improvement.uniqueObjects.none {
|
val resourcesAvailable = improvement.uniqueObjects.none { improvementUnique ->
|
||||||
improvementUnique ->
|
improvementUnique.isOfType(UniqueType.ConsumesResources) &&
|
||||||
improvementUnique.isOfType(UniqueType.ConsumesResources) &&
|
(civResources[improvementUnique.params[1]] ?: 0) < improvementUnique.params[0].toInt()
|
||||||
(civResources[improvementUnique.params[1]] ?: 0) < improvementUnique.params[0].toInt()
|
}
|
||||||
}
|
|
||||||
|
|
||||||
finalActions += UnitAction(UnitActionType.CreateImprovement,
|
finalActions += UnitAction(UnitActionType.CreateImprovement,
|
||||||
title = UnitActionModifiers.actionTextWithSideEffects(
|
title = UnitActionModifiers.actionTextWithSideEffects(
|
||||||
"Create [$improvementName]",
|
"Create [${improvement.name}]",
|
||||||
unique,
|
unique,
|
||||||
unit
|
unit
|
||||||
),
|
),
|
||||||
action = {
|
action = {
|
||||||
val unitTile = unit.getTile()
|
val unitTile = unit.getTile()
|
||||||
unitTile.changeImprovement(improvementName, unit.civ, unit)
|
unitTile.changeImprovement(improvement.name, unit.civ, unit)
|
||||||
|
|
||||||
// without this the world screen won't show the improvement because it isn't the 'last seen improvement'
|
unit.civ.cache.updateViewableTiles() // to update 'last seen improvement'
|
||||||
unit.civ.cache.updateViewableTiles()
|
|
||||||
|
|
||||||
UnitActionModifiers.activateSideEffects(unit, unique)
|
UnitActionModifiers.activateSideEffects(unit, unique)
|
||||||
}.takeIf {
|
}.takeIf {
|
||||||
resourcesAvailable
|
resourcesAvailable
|
||||||
&& unit.currentMovement > 0f
|
&& unit.currentMovement > 0f
|
||||||
&& tile.improvementFunctions.canBuildImprovement(improvement, unit.civ)
|
&& tile.improvementFunctions.canBuildImprovement(improvement, unit.civ)
|
||||||
// Next test is to prevent interfering with UniqueType.CreatesOneImprovement -
|
// Next test is to prevent interfering with UniqueType.CreatesOneImprovement -
|
||||||
// not pretty, but users *can* remove the building from the city queue an thus clear this:
|
// not pretty, but users *can* remove the building from the city queue an thus clear this:
|
||||||
&& !tile.isMarkedForCreatesOneImprovement()
|
&& !tile.isMarkedForCreatesOneImprovement()
|
||||||
&& !tile.isImpassible() // Not 100% sure that this check is necessary...
|
&& !tile.isImpassible() // Not 100% sure that this check is necessary...
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return finalActions
|
return finalActions
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user