BattleEffectDurationAdvanceResult.kt

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

import io.github.lishangbu.avalon.game.battle.engine.core.mutation.BattleMutation
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.flow.BattleRuntimeSnapshot

/**
 * 一轮 duration 推进后的聚合结果。
 *
 * @property snapshot 已完成“未到期 effect 递减”的快照。
 * @property expirationMutations 本轮因为 duration 到期而需要继续提交的移除 mutation。
 */
internal data class BattleEffectDurationAdvanceResult(
    val snapshot: BattleRuntimeSnapshot,
    val expirationMutations: List<BattleSessionScopedMutation> = emptyList(),
)

/**
 * 带 session 上下文的 mutation 请求。
 *
 * 设计意图:
 * - 让 end-turn duration 到期移除也能携带 `self / target / source` 语义进入 interceptor;
 * - 避免 field / side / unit 三类 duration manager 自己重复拼装 mutation 提交上下文。
 */
internal data class BattleSessionScopedMutation(
    val selfId: String?,
    val targetId: String?,
    val sourceId: String?,
    val mutation: BattleMutation,
)