TargetRelationConditionInterpreter.kt

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

import io.github.lishangbu.avalon.game.battle.engine.core.constant.BattleAttributeKeys
import io.github.lishangbu.avalon.game.battle.engine.core.dsl.ConditionNode
import io.github.lishangbu.avalon.game.battle.engine.core.dsl.condition.TargetRelationConditionNode
import io.github.lishangbu.avalon.game.battle.engine.core.event.EventContext
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.ConditionInterpreter
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.support.EventContextAttributeReader
import io.github.lishangbu.avalon.game.battle.engine.core.type.ConditionTypeId
import io.github.lishangbu.avalon.game.battle.engine.core.type.StandardConditionTypeIds

/**
 * `target_relation` 条件解释器。
 */
class TargetRelationConditionInterpreter : ConditionInterpreter {
    override val type: ConditionTypeId = StandardConditionTypeIds.TARGET_RELATION

    override fun evaluate(
        condition: ConditionNode,
        context: EventContext,
    ): Boolean {
        require(condition is TargetRelationConditionNode) { "Condition must be TargetRelationConditionNode." }
        return EventContextAttributeReader.readString(BattleAttributeKeys.TARGET_RELATION, context) == condition.value
    }
}