Resolved #9556 - Transform uniques accept conditionals correctly

This commit is contained in:
Yair Morgenstern 2023-06-11 12:22:36 +03:00
parent 4dad953db9
commit a853851cb8

View File

@ -42,7 +42,7 @@ object UnitActions {
val actionList = ArrayList<UnitAction>() val actionList = ArrayList<UnitAction>()
// Determined by unit uniques // Determined by unit uniques
addTransformAction(unit, actionList) addTransformActions(unit, actionList)
addParadropAction(unit, actionList) addParadropAction(unit, actionList)
addAirSweepAction(unit, actionList) addAirSweepAction(unit, actionList)
addSetupAction(unit, actionList) addSetupAction(unit, actionList)
@ -309,28 +309,27 @@ object UnitActions {
} }
} }
private fun addTransformAction( private fun addTransformActions(
unit: MapUnit, unit: MapUnit,
actionList: ArrayList<UnitAction> actionList: ArrayList<UnitAction>
) { ) {
val upgradeAction = getTransformAction(unit) val upgradeAction = getTransformActions(unit)
if (upgradeAction != null) actionList += upgradeAction actionList += upgradeAction
} }
/** */ /** */
private fun getTransformAction( private fun getTransformActions(
unit: MapUnit unit: MapUnit
): ArrayList<UnitAction>? { ): ArrayList<UnitAction> {
if (!unit.baseUnit().hasUnique(UniqueType.CanTransform)) return null // can't upgrade to anything
val unitTile = unit.getTile() val unitTile = unit.getTile()
val civInfo = unit.civ val civInfo = unit.civ
val stateForConditionals = StateForConditionals(unit = unit, civInfo = civInfo, tile = unitTile)
val transformList = ArrayList<UnitAction>() val transformList = ArrayList<UnitAction>()
for (unique in unit.baseUnit().getMatchingUniques(UniqueType.CanTransform, for (unique in unit.baseUnit().getMatchingUniques(UniqueType.CanTransform, stateForConditionals)) {
StateForConditionals(unit = unit, civInfo = civInfo, tile = unitTile))) {
val unitToTransformTo = civInfo.getEquivalentUnit(unique.params[0]) val unitToTransformTo = civInfo.getEquivalentUnit(unique.params[0])
val stateForConditionals = StateForConditionals(unit.civ, unit = unit) if (unitToTransformTo.getMatchingUniques(UniqueType.OnlyAvailableWhen)
if (unitToTransformTo.getMatchingUniques(UniqueType.OnlyAvailableWhen).any { !it.conditionalsApply(stateForConditionals) }) .any { !it.conditionalsApply(stateForConditionals) })
continue continue
// Check _new_ resource requirements // Check _new_ resource requirements