mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-20 19:56:51 +01:00
Resolved #12823 - "Cannot attack" accepts "vs" conditionals
This commit is contained in:
parent
263bb53277
commit
629081f310
|
|
@ -5,6 +5,7 @@ import com.unciv.logic.city.City
|
|||
import com.unciv.logic.map.mapunit.MapUnit
|
||||
import com.unciv.logic.map.mapunit.movement.PathsToTilesWithinTurn
|
||||
import com.unciv.logic.map.tile.Tile
|
||||
import com.unciv.models.ruleset.unique.StateForConditionals
|
||||
import com.unciv.models.ruleset.unique.UniqueType
|
||||
|
||||
object TargetHelper {
|
||||
|
|
@ -112,22 +113,27 @@ object TargetHelper {
|
|||
)
|
||||
return false
|
||||
|
||||
if (combatant is MapUnitCombatant && combatant.hasUnique(UniqueType.CannotAttack))
|
||||
return false
|
||||
|
||||
if (combatant is MapUnitCombatant) {
|
||||
val stateForConditionals = StateForConditionals(
|
||||
unit = (combatant as? MapUnitCombatant)?.unit, tile = tile,
|
||||
ourCombatant = combatant, theirCombatant = tileCombatant, combatAction = CombatAction.Attack)
|
||||
|
||||
if (combatant is MapUnitCombatant &&
|
||||
combatant.unit.getMatchingUniques(UniqueType.CanOnlyAttackUnits).run {
|
||||
any() && none { tileCombatant.matchesFilter(it.params[0]) }
|
||||
}
|
||||
)
|
||||
return false
|
||||
if (combatant.hasUnique(UniqueType.CannotAttack, stateForConditionals))
|
||||
return false
|
||||
|
||||
if (combatant is MapUnitCombatant &&
|
||||
combatant.unit.getMatchingUniques(UniqueType.CanOnlyAttackTiles).run {
|
||||
any() && none { tile.matchesFilter(it.params[0]) }
|
||||
}
|
||||
)
|
||||
return false
|
||||
if (combatant.unit.getMatchingUniques(UniqueType.CanOnlyAttackUnits, stateForConditionals).run {
|
||||
any() && none { tileCombatant.matchesFilter(it.params[0]) }
|
||||
}
|
||||
)
|
||||
return false
|
||||
|
||||
if (combatant.unit.getMatchingUniques(UniqueType.CanOnlyAttackTiles, stateForConditionals).run {
|
||||
any() && none { tile.matchesFilter(it.params[0]) }
|
||||
}
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
// Only units with the right unique can view submarines (or other invisible units) from more then one tile away.
|
||||
// Garrisoned invisible units can be attacked by anyone, as else the city will be in invincible.
|
||||
|
|
@ -135,6 +141,7 @@ object TargetHelper {
|
|||
return combatant is MapUnitCombatant
|
||||
&& combatant.getCivInfo().viewableInvisibleUnitsTiles.map { it.position }.contains(tile.position)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user