BattleState.kt

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

/**
 * 战斗级运行时状态的最小骨架。
 *
 * 设计意图:
 * - 承载整场战斗的全局状态。
 * - 作为事件上下文与快照系统的根节点。
 *
 * 当前版本只保留最核心字段,后续可逐步扩展。
 *
 * @property id 战斗实例唯一标识。
 * @property formatId 当前战斗采用的规则集标识。
 * @property lifecycle 当前 battle 的全局生命周期阶段。
 * @property turn 当前回合数。
 * @property winner 战斗赢家标识,未结束时可为空。
 */
data class BattleState(
    val id: String,
    val formatId: String,
    val battleKind: BattleType = BattleType.TRAINER,
    val randomState: BattleRandomState = BattleRandomState.seeded(id, formatId),
    val lifecycle: BattleLifecycle = BattleLifecycle.INITIALIZING,
    val turn: Int = 0,
    val winner: String? = null,
    val endedReason: String? = null,
    val capturableSideId: String? = null,
    val capturedUnitId: String? = null,
    val failedRunAttempts: Map<String, Int> = emptyMap(),
)