BattleSessionMoveActionHandler.kt
package io.github.lishangbu.avalon.game.battle.engine.core.session
import kotlin.reflect.KClass
/**
* `BattleSessionMoveAction` 执行处理器。
*
* @property actionExecutionSupport move/item 等 effect 执行辅助组件。
*/
class BattleSessionMoveActionHandler(
private val actionExecutionSupport: BattleSessionActionExecutionSupport,
) : BattleSessionActionHandler {
/**
* 当前处理器负责的 action 类型。
*/
override val actionType: KClass<out BattleSessionAction> = BattleSessionMoveAction::class
/**
* 执行 move action 并返回结算结果。
*/
override fun execute(
action: BattleSessionAction,
session: BattleSession,
): BattleSessionActionExecutionResult {
val moveAction =
action as? BattleSessionMoveAction
?: error("Expected BattleSessionMoveAction but got '${action::class.qualifiedName}'.")
val finalResult =
actionExecutionSupport.executeResolvedEffect(
session = session,
effectId = moveAction.moveId,
actorUnitId = moveAction.attackerId,
targetUnitId = moveAction.targetId,
accuracy = moveAction.accuracy,
evasion = moveAction.evasion,
basePower = moveAction.basePower,
damage = moveAction.damage,
attributes = moveAction.attributes,
)
return BattleSessionActionExecutionResult(
action = moveAction,
snapshot = session.currentSnapshot,
moveResult = finalResult,
)
}
}