BattleSessionPublication.kt

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

/**
 * battle session 内部发布事件。
 *
 * 设计意图:
 * - 作为 `BattleSessionEventPublisher` 与各类 projector 之间的统一载体。
 * - 让 battle log、结构化事件和 resource ledger 可以共享同一条发布链路。
 *
 * @property turn 发布发生时的回合数。
 * @property battleLogMessage 需要投影到 battle log 的文本消息。
 * @property eventPayload 需要投影到结构化事件流的强类型 payload。
 * @property resourceUsage 需要投影到 resource ledger 的账本条目。
 */
data class BattleSessionPublication(
    val turn: Int,
    val battleLogMessage: String? = null,
    val eventPayload: BattleSessionEventPayload? = null,
    val resourceUsage: BattleSessionResourceUsage? = null,
)