BattleSessionExecutedActionEventPayloads.kt
package io.github.lishangbu.avalon.game.battle.engine.core.session
/**
* battle session action 执行完成事件 payload 基类。
*
* @property actionType 当前已执行动作的种类。
*/
sealed interface BattleSessionExecutedActionPayload : BattleSessionEventPayload {
val actionType: BattleSessionActionEventKind
override val type: BattleSessionEventType
get() = BattleSessionEventType.MOVE_EXECUTED
}
/**
* move action 执行完成事件 payload。
*
* @property moveId 招式标识。
* @property attackerId 出手单位标识。
* @property targetId 目标单位标识。
* @property hitSuccessful 当前招式是否命中。
* @property criticalHit 当前招式是否击中要害。
* @property basePower 当前招式最终威力。
* @property damageRoll 当前招式最终伤害浮动倍率;未参与伤害浮动时为空。
* @property damage 当前招式最终伤害。
*/
data class BattleSessionMoveExecutedPayload(
val moveId: String,
val attackerId: String,
val targetId: String,
val hitSuccessful: Boolean,
val criticalHit: Boolean,
val basePower: Int,
val damageRoll: Int? = null,
val damage: Int,
) : BattleSessionExecutedActionPayload {
/**
* 当前已执行动作的种类。
*/
override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.MOVE
}
/**
* switch action 执行完成事件 payload。
*
* @property sideId 发起换人的 side 标识。
* @property outgoingUnitId 当前下场单位标识。
* @property incomingUnitId 即将上场单位标识。
*/
data class BattleSessionSwitchExecutedPayload(
val sideId: String,
val outgoingUnitId: String,
val incomingUnitId: String,
) : BattleSessionExecutedActionPayload {
/**
* 当前已执行动作的种类。
*/
override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.SWITCH
}
/**
* item action 执行完成事件 payload。
*
* @property itemId 物品标识。
* @property actorUnitId 使用者单位标识。
* @property targetId 目标单位标识。
*/
data class BattleSessionItemExecutedPayload(
val itemId: String,
val actorUnitId: String,
val targetId: String,
) : BattleSessionExecutedActionPayload {
/**
* 当前已执行动作的种类。
*/
override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.ITEM
}
/**
* wait action 执行完成事件 payload。
*
* @property unitId 发起等待的单位标识。
*/
data class BattleSessionWaitExecutedPayload(
val unitId: String,
) : BattleSessionExecutedActionPayload {
/**
* 当前已执行动作的种类。
*/
override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.WAIT
}