BattleSessionStructuredEventProjector.kt

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

/**
 * 结构化事件投影器。
 */
class BattleSessionStructuredEventProjector : BattleSessionProjector {
    /**
     * 当前 projector 在发布链中的执行顺序。
     */
    override val order: Int = 100

    /**
     * 把发布事件中的结构化事件投影到 session event log。
     */
    override fun project(
        session: BattleSession,
        publication: BattleSessionPublication,
    ) {
        val eventPayload = publication.eventPayload ?: return
        session.appendEventLog(
            BattleSessionEvent(
                turn = publication.turn,
                payload = eventPayload,
            ),
        )
    }
}