BattleHeldItemRuntimeSupport.kt
package io.github.lishangbu.avalon.game.battle.engine.core.runtime.support
import io.github.lishangbu.avalon.game.battle.engine.core.model.FieldState
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitState
/**
* 持有物运行时生效判定辅助。
*
* 设计意图:
* - 把 `Magic Room` 对 held item 的统一抑制语义收口到一处;
* - 避免 `itemId` 的裸读取在 phase processor、run resolver、condition interpreter 中各自分叉;
* - 明确区分“单位持有了什么”与“当前 battle 规则下该持有物是否还能生效”。
*/
object BattleHeldItemRuntimeSupport {
/**
* 返回当前仍然处于激活状态的 held item id。
*
* 当 `Magic Room` 生效时,所有 held item 一律视为失效,因此返回 `null`。
*/
fun activeItemId(
unit: UnitState?,
field: FieldState,
): String? {
if (unit == null) {
return null
}
return if (BattleFieldConditionSupport.hasMagicRoom(field)) {
null
} else {
unit.itemId
}
}
fun hasActiveItem(
unit: UnitState?,
field: FieldState,
itemId: String,
): Boolean = activeItemId(unit, field) == itemId
}