mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
Generalized tile conditionals (#6110)
Tiles can come from either A. attackedTile B. unit tile C. City tile All tile conditionals now work for all tile sources
This commit is contained in:
parent
f40ca8469f
commit
5e29b1321b
@ -75,7 +75,10 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
|
|||||||
): Boolean {
|
): Boolean {
|
||||||
|
|
||||||
fun ruleset() = state.civInfo!!.gameInfo.ruleSet
|
fun ruleset() = state.civInfo!!.gameInfo.ruleSet
|
||||||
val relevantUnitTile by lazy { state.attackedTile ?: state.unit?.getTile() }
|
val relevantTile by lazy { state.attackedTile
|
||||||
|
?: state.unit?.getTile()
|
||||||
|
?: state.cityInfo?.getCenterTile()
|
||||||
|
}
|
||||||
val relevantUnit by lazy {
|
val relevantUnit by lazy {
|
||||||
if (state.ourCombatant != null && state.ourCombatant is MapUnitCombatant) state.ourCombatant.unit
|
if (state.ourCombatant != null && state.ourCombatant is MapUnitCombatant) state.ourCombatant.unit
|
||||||
else state.unit
|
else state.unit
|
||||||
@ -129,27 +132,27 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
|
|||||||
state.ourCombatant != null && state.ourCombatant.getHealth() < condition.params[0].toInt()
|
state.ourCombatant != null && state.ourCombatant.getHealth() < condition.params[0].toInt()
|
||||||
|
|
||||||
UniqueType.ConditionalInTiles ->
|
UniqueType.ConditionalInTiles ->
|
||||||
relevantUnitTile?.matchesFilter(condition.params[0], state.civInfo) == true
|
relevantTile?.matchesFilter(condition.params[0], state.civInfo) == true
|
||||||
UniqueType.ConditionalFightingInTiles ->
|
UniqueType.ConditionalFightingInTiles ->
|
||||||
state.attackedTile?.matchesFilter(condition.params[0], state.civInfo) == true
|
state.attackedTile?.matchesFilter(condition.params[0], state.civInfo) == true
|
||||||
UniqueType.ConditionalInTilesAnd ->
|
UniqueType.ConditionalInTilesAnd ->
|
||||||
relevantUnitTile!=null && relevantUnitTile!!.matchesFilter(condition.params[0], state.civInfo)
|
relevantTile!=null && relevantTile!!.matchesFilter(condition.params[0], state.civInfo)
|
||||||
&& relevantUnitTile!!.matchesFilter(condition.params[1], state.civInfo)
|
&& relevantTile!!.matchesFilter(condition.params[1], state.civInfo)
|
||||||
UniqueType.ConditionalVsLargerCiv -> {
|
UniqueType.ConditionalVsLargerCiv -> {
|
||||||
val yourCities = state.civInfo?.cities?.size ?: 1
|
val yourCities = state.civInfo?.cities?.size ?: 1
|
||||||
val theirCities = state.theirCombatant?.getCivInfo()?.cities?.size ?: 0
|
val theirCities = state.theirCombatant?.getCivInfo()?.cities?.size ?: 0
|
||||||
yourCities < theirCities
|
yourCities < theirCities
|
||||||
}
|
}
|
||||||
UniqueType.ConditionalForeignContinent ->
|
UniqueType.ConditionalForeignContinent ->
|
||||||
state.civInfo != null && state.unit != null
|
state.civInfo != null && relevantTile != null
|
||||||
&& (state.civInfo.cities.isEmpty()
|
&& (state.civInfo.cities.isEmpty()
|
||||||
|| state.civInfo.getCapital().getCenterTile().getContinent()
|
|| state.civInfo.getCapital().getCenterTile().getContinent()
|
||||||
!= state.unit.getTile().getContinent()
|
!= relevantTile!!.getContinent()
|
||||||
)
|
)
|
||||||
UniqueType.ConditionalAdjacentUnit ->
|
UniqueType.ConditionalAdjacentUnit ->
|
||||||
state.civInfo != null
|
state.civInfo != null
|
||||||
&& relevantUnit != null
|
&& relevantUnit != null
|
||||||
&& relevantUnitTile!!.neighbors.any {
|
&& relevantTile!!.neighbors.any {
|
||||||
it.militaryUnit != null
|
it.militaryUnit != null
|
||||||
&& it.militaryUnit != relevantUnit
|
&& it.militaryUnit != relevantUnit
|
||||||
&& it.militaryUnit!!.civInfo == state.civInfo
|
&& it.militaryUnit!!.civInfo == state.civInfo
|
||||||
@ -157,13 +160,13 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
|
|||||||
}
|
}
|
||||||
|
|
||||||
UniqueType.ConditionalNeighborTiles ->
|
UniqueType.ConditionalNeighborTiles ->
|
||||||
state.cityInfo != null &&
|
relevantTile != null &&
|
||||||
state.cityInfo.getCenterTile().neighbors.count {
|
relevantTile!!.neighbors.count {
|
||||||
it.matchesFilter(condition.params[2], state.civInfo)
|
it.matchesFilter(condition.params[2], state.civInfo)
|
||||||
} in (condition.params[0].toInt())..(condition.params[1].toInt())
|
} in (condition.params[0].toInt())..(condition.params[1].toInt())
|
||||||
UniqueType.ConditionalNeighborTilesAnd ->
|
UniqueType.ConditionalNeighborTilesAnd ->
|
||||||
state.cityInfo != null
|
relevantTile != null
|
||||||
&& state.cityInfo.getCenterTile().neighbors.count {
|
&& relevantTile!!.neighbors.count {
|
||||||
it.matchesFilter(condition.params[2], state.civInfo)
|
it.matchesFilter(condition.params[2], state.civInfo)
|
||||||
&& it.matchesFilter(condition.params[3], state.civInfo)
|
&& it.matchesFilter(condition.params[3], state.civInfo)
|
||||||
} in (condition.params[0].toInt())..(condition.params[1].toInt())
|
} in (condition.params[0].toInt())..(condition.params[1].toInt())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user