BattleSessionRunActionHandler.kt
package io.github.lishangbu.avalon.game.battle.engine.core.session
import kotlin.reflect.KClass
/**
* `BattleSessionRunAction` 执行处理器。
*
* @property actionExecutionSupport switch/run 等状态更新辅助组件。
*/
class BattleSessionRunActionHandler(
private val actionExecutionSupport: BattleSessionActionExecutionSupport,
) : BattleSessionActionHandler {
/**
* 当前处理器负责的 action 类型。
*/
override val actionType: KClass<out BattleSessionAction> = BattleSessionRunAction::class
/**
* 执行 run action。
*/
override fun execute(
action: BattleSessionAction,
session: BattleSession,
): BattleSessionActionExecutionResult {
val runAction =
action as? BattleSessionRunAction
?: error("Expected BattleSessionRunAction but got '${action::class.qualifiedName}'.")
session.currentSnapshot = actionExecutionSupport.applyRunAction(session, runAction)
return BattleSessionActionExecutionResult(
action = runAction,
snapshot = session.currentSnapshot,
)
}
}