BattleSessionEventPayload.kt

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

import com.fasterxml.jackson.annotation.JsonTypeInfo

/**
 * battle session 结构化事件 payload。
 *
 * 设计意图:
 * - 用强类型 payload 取代松散的 attributes 映射。
 * - 让 session 事件边界直接暴露真实 payload,而不是再退化成松散 map。
 */
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
interface BattleSessionEventPayload {
    /**
     * 当前 payload 对应的结构化事件类型。
     */
    val type: BattleSessionEventType
}

/**
 * battle session 动作事件种类。
 *
 * 设计意图:
 * - 为 queued/executed/battle-ended 等事件提供比裸字符串更明确的动作语义。
 */
enum class BattleSessionActionEventKind {
    MOVE,
    SWITCH,
    ITEM,
    CAPTURE,
    RUN,
    WAIT,
}