BattleEngineCommands.kt
package io.github.lishangbu.avalon.game.battle.engine.application
import io.github.lishangbu.avalon.game.battle.engine.core.model.BattleType
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitState
/**
* 引擎初始化时单个 side 的输入。
*
* 这里直接要求调用方提供已经装配完成的 `UnitState`,
* 让 battle-engine 不再认识数据库实体或 dataset 读取细节。
*/
data class InitializeBattleSideCommand(
val sideId: String,
val units: List<UnitState>,
val activeUnitIds: Set<String> = emptySet(),
)
/**
* 引擎建局命令。
*
* 设计意图:
* - 把原先 `create/configure/registerSide/registerUnit/start` 这一串低层步骤收成一个稳定入口;
* - 让 game 模块只负责把真实数据装配成命令,而不再手动驱动引擎内部生命周期。
*/
data class InitializeBattleCommand(
val sessionId: String,
val formatId: String,
val sides: List<InitializeBattleSideCommand>,
val battleKind: BattleType = BattleType.TRAINER,
val capturableSideId: String? = null,
val autoStart: Boolean = true,
)
/**
* 智能出招命令。
*/
data class SubmitMoveChoiceCommand(
val attackerId: String,
val moveId: String,
val targetId: String? = null,
val priority: Int? = null,
val speed: Int? = null,
val accuracy: Int? = null,
val evasion: Int? = null,
val basePower: Int? = null,
val damage: Int? = null,
val accuracyRoll: Int? = null,
val chanceRoll: Int? = null,
val criticalRoll: Int? = null,
val damageRoll: Int? = null,
val criticalHit: Boolean? = null,
val attributes: Map<String, Any?> = emptyMap(),
)
/**
* 智能用道具命令。
*/
data class SubmitItemChoiceCommand(
val actorUnitId: String,
val itemId: String,
val targetId: String? = null,
val priority: Int? = null,
val speed: Int? = null,
val chanceRoll: Int? = null,
val attributes: Map<String, Any?> = emptyMap(),
)
/**
* 智能捕捉命令。
*/
data class SubmitCaptureChoiceCommand(
val playerId: String,
val ballItemId: String,
val sourceUnitId: String? = null,
val targetId: String,
val priority: Int? = null,
val speed: Int? = null,
)
/**
* 换人命令。
*/
data class SubmitSwitchChoiceCommand(
val sideId: String,
val outgoingUnitId: String,
val incomingUnitId: String,
val priority: Int? = null,
val speed: Int? = null,
)
/**
* 逃跑命令。
*/
data class SubmitRunChoiceCommand(
val sideId: String,
val priority: Int? = null,
val speed: Int? = null,
)
/**
* 替补上场命令。
*/
data class SubmitReplacementChoiceCommand(
val sideId: String,
val incomingUnitId: String,
)