mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-26 05:14:32 -04:00
Unify 'get usable unit action uniques' to function
This commit is contained in:
parent
03e09d85ee
commit
c14a94fa15
@ -9,6 +9,11 @@ import com.unciv.ui.components.Fonts
|
||||
|
||||
object UnitActionModifiers {
|
||||
|
||||
fun getUsableUnitActionUniques(unit:MapUnit, actionUniqueType: UniqueType) =
|
||||
unit.getMatchingUniques(actionUniqueType)
|
||||
.filter { it.conditionals.none { it.type == UniqueType.UnitActionExtraLimitedTimes } }
|
||||
.filter { usagesLeft(unit, it) != 0 }
|
||||
|
||||
private fun getMovementPointsToUse(actionUnique: Unique): Int {
|
||||
val movementCost = actionUnique.conditionals
|
||||
.filter { it.type == UniqueType.UnitActionMovementCost }
|
||||
|
@ -60,13 +60,12 @@ object UnitActionsFromUniques {
|
||||
* (no movement left, too close to another city).
|
||||
*/
|
||||
fun getFoundCityAction(unit: MapUnit, tile: Tile): UnitAction? {
|
||||
val unique = unit.getMatchingUniques(UniqueType.FoundCity)
|
||||
.filter { unique -> unique.conditionals.none { it.type == UniqueType.UnitActionExtraLimitedTimes } }
|
||||
.firstOrNull()
|
||||
if (unique == null || tile.isWater || tile.isImpassible()) return null
|
||||
val unique = UnitActionModifiers.getUsableUnitActionUniques(unit, UniqueType.FoundCity)
|
||||
.firstOrNull() ?: return null
|
||||
|
||||
if (tile.isWater || tile.isImpassible()) return null
|
||||
// Spain should still be able to build Conquistadors in a one city challenge - but can't settle them
|
||||
if (unit.civ.isOneCityChallenger() && unit.civ.hasEverOwnedOriginalCapital) return null
|
||||
if (UnitActionModifiers.usagesLeft(unit, unique) ==0) return null
|
||||
|
||||
if (unit.currentMovement <= 0 || !tile.canBeSettled())
|
||||
return UnitAction(UnitActionType.FoundCity, action = null)
|
||||
@ -227,17 +226,15 @@ object UnitActionsFromUniques {
|
||||
|
||||
fun getImprovementConstructionActions(unit: MapUnit, tile: Tile): ArrayList<UnitAction> {
|
||||
val finalActions = ArrayList<UnitAction>()
|
||||
val uniquesToCheck = unit.getMatchingUniques(UniqueType.ConstructImprovementInstantly)
|
||||
val uniquesToCheck = UnitActionModifiers.getUsableUnitActionUniques(unit, UniqueType.ConstructImprovementInstantly)
|
||||
|
||||
val civResources = unit.civ.getCivResourcesByName()
|
||||
|
||||
for (unique in uniquesToCheck) {
|
||||
// Skip actions with a "[amount] extra times" conditional - these are treated in addTriggerUniqueActions instead
|
||||
if (unique.conditionals.any { it.type == UniqueType.UnitActionExtraLimitedTimes }) continue
|
||||
|
||||
val improvementName = unique.params[0]
|
||||
val improvement = tile.ruleset.tileImprovements[improvementName]
|
||||
?: continue
|
||||
if (UnitActionModifiers.usagesLeft(unit, unique) == 0) continue
|
||||
|
||||
val resourcesAvailable = improvement.uniqueObjects.none {
|
||||
improvementUnique ->
|
||||
|
Loading…
x
Reference in New Issue
Block a user