DefaultBattleSessionTargetQueryService.kt
package io.github.lishangbu.avalon.game.battle.engine.core.session.target
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.flow.BattleRuntimeSnapshot
/**
* 默认 battle session 目标查询服务。
*
* @property targetModeResolver effect 目标模式解析器。
* @property availableTargetResolver 当前快照下的可选目标解析器。
*/
class DefaultBattleSessionTargetQueryService(
private val targetModeResolver: BattleSessionTargetModeResolver,
private val availableTargetResolver: BattleSessionAvailableTargetResolver,
) : BattleSessionTargetQueryService {
/**
* 基于当前快照生成一个 effect 的目标查询结果。
*/
override fun resolve(
snapshot: BattleRuntimeSnapshot,
effectId: String,
actorUnitId: String,
): BattleSessionTargetQuery {
val targetMode = targetModeResolver.resolve(effectId)
return BattleSessionTargetQuery(
effectId = effectId,
actorUnitId = actorUnitId,
mode = targetMode,
availableTargetUnitIds = availableTargetResolver.resolve(snapshot, actorUnitId, targetMode),
requiresExplicitTarget = BattleSessionTargetingSupport.requiresExplicitTarget(targetMode),
)
}
}