SwapBoostsActionNode.kt

package io.github.lishangbu.avalon.game.battle.engine.core.dsl.action

import io.github.lishangbu.avalon.game.battle.engine.core.dsl.ActionNode
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.TargetSelectorId

/**
 * 交换两名单位当前 stored boosts 的动作。
 *
 * 典型用法:
 * - Power Swap: `stats=[atk, spa]`
 * - Guard Swap: `stats=[def, spd]`
 * - Heart Swap: `stats=[]`,表示交换全部当前 boosts
 *
 * @property left 交换左侧单位。
 * @property right 交换右侧单位。
 * @property stats 需要交换的能力项;为空时表示双方当前全部 boosts 项。
 */
data class SwapBoostsActionNode(
    val left: TargetSelectorId,
    val right: TargetSelectorId,
    val stats: Set<String> = emptySet(),
) : ActionNode {
    override val type: ActionTypeId = StandardActionTypeIds.SWAP_BOOSTS
}