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,
)