BattleSessionGateway.kt
package io.github.lishangbu.avalon.game.battle.engine.application.gateway
import io.github.lishangbu.avalon.game.battle.engine.core.model.BattleType
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitState
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionChoice
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionQuery
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionTurnResult
/**
* BattleSession 内部网关接口。
*
* 设计意图:
* - 为上层调用方提供稳定的会话 API。
* - 屏蔽 BattleSession 内部装配、存储和查询细节。
*/
interface BattleSessionGateway {
fun createSession(
sessionId: String,
formatId: String,
): BattleSessionQuery
fun configureSession(
sessionId: String,
battleKind: BattleType,
capturableSideId: String? = null,
): BattleSessionQuery
fun startSession(sessionId: String): BattleSessionQuery
fun registerSide(
sessionId: String,
sideId: String,
): BattleSessionQuery
fun registerUnit(
sessionId: String,
sideId: String,
unit: UnitState,
active: Boolean = true,
): BattleSessionQuery
fun submitChoice(
sessionId: String,
choice: BattleSessionChoice,
): BattleSessionQuery
fun submitChoices(
sessionId: String,
choices: List<BattleSessionChoice>,
): BattleSessionQuery
fun submitReplacementChoice(
sessionId: String,
sideId: String,
incomingUnitId: String,
): BattleSessionQuery
fun markSessionSettled(sessionId: String): BattleSessionQuery
fun resolveTurn(sessionId: String): BattleSessionTurnResult
fun querySession(sessionId: String): BattleSessionQuery
}