ForceSwitchMutation.kt

package io.github.lishangbu.avalon.game.battle.engine.core.mutation

import io.github.lishangbu.avalon.game.battle.engine.core.type.TargetSelectorId

/**
 * 强制替换变更。
 *
 * @property target 目标选择器。
 *
 * 说明:
 * - 该 mutation 不直接执行换人,而是先把目标单位标记为 `forceSwitchRequested=true`;
 * - 后续由 `BattleSessionReplacementResolver` 在统一替补阶段消费这个标记,
 *   决定是自动替补还是生成 replacement request。
 */
data class ForceSwitchMutation(
    val target: TargetSelectorId,
) : BattleMutation