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
}