EventContextTargetResolver.kt

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

import io.github.lishangbu.avalon.game.battle.engine.core.event.EventContext
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitState
import io.github.lishangbu.avalon.game.battle.engine.core.type.StandardTargetSelectorIds
import io.github.lishangbu.avalon.game.battle.engine.core.type.TargetSelectorId

/**
 * EventContext 内部轻量 target selector 解析器。
 *
 * 设计意图:
 * - 为依赖 `self / target / source` 三元上下文的动作执行器提供统一读取入口;
 * - 避免每个 executor 自己写一遍 `when (selector)`;
 * - 当前只覆盖“单单位上下文可明确解析”的 selector,超出范围返回 `null`。
 */
object EventContextTargetResolver {
    fun resolveSingleUnit(
        selector: TargetSelectorId,
        context: EventContext,
    ): UnitState? =
        when (selector) {
            StandardTargetSelectorIds.SELF -> context.self

            StandardTargetSelectorIds.TARGET,
            StandardTargetSelectorIds.FOE,
            -> context.target

            StandardTargetSelectorIds.SOURCE -> context.source

            else -> null
        }
}