ModifyMultiplierActionExecutor.kt
package io.github.lishangbu.avalon.game.battle.engine.core.runtime.action
import io.github.lishangbu.avalon.game.battle.engine.core.dsl.ActionNode
import io.github.lishangbu.avalon.game.battle.engine.core.dsl.action.ModifyMultiplierActionNode
import io.github.lishangbu.avalon.game.battle.engine.core.event.EventContext
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.ActionExecutor
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.ActionResult
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.support.BattleRelayReader
import io.github.lishangbu.avalon.game.battle.engine.core.type.ActionTypeId
import io.github.lishangbu.avalon.game.battle.engine.core.type.StandardActionTypeIds
/**
* `modify_multiplier` 动作执行器。
*/
class ModifyMultiplierActionExecutor : ActionExecutor {
override val type: ActionTypeId = StandardActionTypeIds.MODIFY_MULTIPLIER
override fun execute(
action: ActionNode,
context: EventContext,
): ActionResult {
require(action is ModifyMultiplierActionNode) { "Action must be ModifyMultiplierActionNode." }
val relayValue =
BattleRelayReader.readDouble(context.relay)
?: error("modify_multiplier requires numeric relay value.")
return ActionResult(
relay = relayValue * action.value,
)
}
}