BattleFieldConditionSupport.kt

package io.github.lishangbu.avalon.game.battle.engine.core.runtime.support

import io.github.lishangbu.avalon.game.battle.engine.core.constant.BattleFieldConditionIds
import io.github.lishangbu.avalon.game.battle.engine.core.model.FieldState
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.flow.BattleRuntimeSnapshot

/**
 * field condition 读取辅助。
 *
 * 设计意图:
 * - 把 room / gravity 这类场地条件的存在判定从各个 phase step 中抽出来;
 * - 让 session、flow、condition interpreter 都能共用同一套 field 真值读取逻辑;
 * - 为后续继续扩展更多 field condition 行为保留统一入口。
 */
object BattleFieldConditionSupport {
    fun hasCondition(
        snapshot: BattleRuntimeSnapshot,
        effectId: String,
    ): Boolean = hasCondition(snapshot.field, effectId)

    fun hasCondition(
        field: FieldState,
        effectId: String,
    ): Boolean = effectId in field.conditionStates

    fun hasTrickRoom(snapshot: BattleRuntimeSnapshot): Boolean = hasCondition(snapshot, BattleFieldConditionIds.TRICK_ROOM)

    fun hasGravity(snapshot: BattleRuntimeSnapshot): Boolean = hasCondition(snapshot, BattleFieldConditionIds.GRAVITY)

    fun hasMagicRoom(snapshot: BattleRuntimeSnapshot): Boolean = hasCondition(snapshot, BattleFieldConditionIds.MAGIC_ROOM)

    fun hasMagicRoom(field: FieldState): Boolean = hasCondition(field, BattleFieldConditionIds.MAGIC_ROOM)

    fun hasWonderRoom(snapshot: BattleRuntimeSnapshot): Boolean = hasCondition(snapshot, BattleFieldConditionIds.WONDER_ROOM)
}