SetBoostsMutation.kt
package io.github.lishangbu.avalon.game.battle.engine.core.mutation
import io.github.lishangbu.avalon.game.battle.engine.core.type.TargetSelectorId
/**
* 直接替换单位当前 stored boosts 的 mutation。
*
* 设计意图:
* - 为 `psych-up / power-swap / topsy-turvy / spectral-thief` 这类“改写既有能力阶级”
* 的规则提供统一写回模型;
* - 这类规则并不是“发起一次新的 boost 请求”,因此不走 `on_boost` 生命周期;
* - 目标写回前仍会经过统一 boost 规范化,保证键、上下限和 0 值清理一致。
*
* @property target 目标选择器。
* @property boosts 目标最终应持有的完整 boosts 快照。
*/
data class SetBoostsMutation(
val target: TargetSelectorId,
val boosts: Map<String, Int>,
) : BattleMutation