From c14a94fa1500da561dd368a29fd2adf684c8f13c Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 28 Sep 2023 16:37:35 +0300 Subject: [PATCH] Unify 'get usable unit action uniques' to function --- .../unit/actions/UnitActionModifiers.kt | 5 +++++ .../unit/actions/UnitActionsFromUniques.kt | 15 ++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt index b538eca387..c8d56f06da 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt @@ -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 } diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt index 6d164366e4..b48621cc7f 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt @@ -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 { val finalActions = ArrayList() - 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 ->