GameBattleRequestViews.kt
package io.github.lishangbu.avalon.game.battle.api
import io.github.lishangbu.avalon.game.battle.engine.core.model.AttachedEffectState
import io.github.lishangbu.avalon.game.battle.engine.core.model.BattleType
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitCaptureContextState
/**
* 面向前端的导入招式请求视图。
*
* @property moveId 招式标识。
* @property currentPp 当前招式剩余 PP。
*/
data class GameBattleImportedMoveApiRequest(
val moveId: String,
val currentPp: Int? = null,
)
/**
* 面向前端的单位导入元数据视图。
*/
data class GameBattleImportedUnitMetadataApiRequest(
val level: Int,
val creatureId: Long? = null,
val creatureInternalName: String? = null,
val natureId: Long? = null,
val natureInternalName: String? = null,
val captureContext: UnitCaptureContextState = UnitCaptureContextState(),
val ivs: Map<String, Int> = emptyMap(),
val evs: Map<String, Int> = emptyMap(),
)
/**
* 面向前端的导入单位请求视图。
*
* @property unitId 单位标识。
* @property metadata 单位结构化元数据。
* @property abilityInternalName 特性内部名称。
* @property itemId 道具标识。
* @property moves 单位招式列表。
* @property currentHp 当前生命值。
* @property statusState 当前主状态运行时状态。
* @property volatileStates 当前挥发状态运行时状态表。
* @property conditionStates 当前附着条件运行时状态表。
* @property boosts 当前 stage / boost 表。
* @property forceSwitchRequested 当前单位是否被标记为强制替换。
*/
data class GameBattleImportedUnitApiRequest(
val unitId: String,
val metadata: GameBattleImportedUnitMetadataApiRequest,
val abilityInternalName: String? = null,
val itemId: String? = null,
val moves: List<GameBattleImportedMoveApiRequest> = emptyList(),
val currentHp: Int? = null,
val statusState: AttachedEffectState? = null,
val volatileStates: Map<String, AttachedEffectState> = emptyMap(),
val conditionStates: Map<String, AttachedEffectState> = emptyMap(),
val boosts: Map<String, Int> = emptyMap(),
val forceSwitchRequested: Boolean = false,
)
/**
* 面向前端的导入 side 请求视图。
*
* @property sideId side 标识。
* @property units side 下的单位请求列表。
* @property activeUnitIds 当前需要直接上场的单位标识集合。
*/
data class GameBattleImportedSideApiRequest(
val sideId: String,
val units: List<GameBattleImportedUnitApiRequest>,
val activeUnitIds: Set<String> = emptySet(),
)
/**
* 面向前端的导入建局请求视图。
*
* @property sessionId 会话标识。
* @property formatId 战斗格式标识。
* @property sides 本次建局的 side 列表。
* @property battleKind 战斗种类。
* @property capturableSideId 可被捕捉的 side 标识。
* @property autoStart 当前会话是否在导入后自动启动。
*/
data class CreateImportedBattleSessionApiRequest(
val sessionId: String,
val formatId: String,
val sides: List<GameBattleImportedSideApiRequest>,
val battleKind: BattleType = BattleType.TRAINER,
val capturableSideId: String? = null,
val autoStart: Boolean = true,
)