GameBattleEventView.kt

package io.github.lishangbu.avalon.game.battle.api

import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionEventPayload
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionEventType
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionResourceUsage
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionResourceUsageKind

/**
 * 面向前端的 battle 事件视图。
 *
 * @property type 当前事件类型。
 * @property turn 当前事件发生时的回合数。
 * @property payload 当前事件的强类型 payload。
 */
data class GameBattleEventView(
    val type: BattleSessionEventType,
    val turn: Int,
    val payload: BattleSessionEventPayload,
)

/**
 * 面向前端的通用资源账本视图。
 *
 * @property kind 当前账本条目种类。
 * @property payload 当前账本条目的强类型 payload。
 */
data class GameBattleResourceUsageView(
    val kind: BattleSessionResourceUsageKind,
    val payload: BattleSessionResourceUsage,
)

/**
 * 面向前端的捕捉资源账本视图。
 *
 * @property playerId 发起捕捉的玩家标识。
 * @property sourceUnitId 扔球单位标识。
 * @property ballItemId 使用的球类道具标识。
 * @property targetUnitId 目标单位标识。
 * @property quantity 本次消耗数量。
 * @property success 本次捕捉是否成功。
 * @property shakes 本次捕捉的摇晃次数。
 * @property reason 本次捕捉结果原因。
 * @property finalRate 本次捕捉的最终概率。
 */
data class GameBattleCaptureResourceUsageView(
    val playerId: String,
    val sourceUnitId: String,
    val ballItemId: String,
    val targetUnitId: String,
    val quantity: Int,
    val success: Boolean,
    val shakes: Int,
    val reason: String,
    val finalRate: Double,
)