RemoveConditionActionExecutor.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.RemoveConditionActionNode
import io.github.lishangbu.avalon.game.battle.engine.core.event.EventContext
import io.github.lishangbu.avalon.game.battle.engine.core.mutation.RemoveConditionMutation
import io.github.lishangbu.avalon.game.battle.engine.core.mutation.RemoveFieldConditionMutation
import io.github.lishangbu.avalon.game.battle.engine.core.mutation.RemoveSideConditionMutation
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.type.ActionTypeId
import io.github.lishangbu.avalon.game.battle.engine.core.type.StandardActionTypeIds
import io.github.lishangbu.avalon.game.battle.engine.core.type.StandardTargetSelectorIds
/**
* `remove_condition` 动作执行器。
*/
class RemoveConditionActionExecutor : ActionExecutor {
override val type: ActionTypeId = StandardActionTypeIds.REMOVE_CONDITION
override fun execute(
action: ActionNode,
context: EventContext,
): ActionResult {
require(action is RemoveConditionActionNode) { "Action must be RemoveConditionActionNode." }
return ActionResult(
mutations =
listOf(
when (action.target) {
StandardTargetSelectorIds.SIDE,
StandardTargetSelectorIds.FOE_SIDE,
-> RemoveSideConditionMutation(action.target, action.value)
StandardTargetSelectorIds.FIELD -> RemoveFieldConditionMutation(action.value)
else -> RemoveConditionMutation(action.target, action.value)
},
),
)
}
}