BattleSessionQueuedActionEventPayloads.kt

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

/**
 * battle session action 入队事件 payload 基类。
 *
 * @property actionType 当前入队动作的种类。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
sealed interface BattleSessionQueuedActionPayload : BattleSessionEventPayload {
    val actionType: BattleSessionActionEventKind
    val priority: Int
    val speed: Int

    override val type: BattleSessionEventType
        get() = BattleSessionEventType.MOVE_QUEUED
}

/**
 * move action 入队事件 payload。
 *
 * @property moveId 招式标识。
 * @property attackerId 出手单位标识。
 * @property targetId 目标单位标识。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
data class BattleSessionMoveQueuedPayload(
    val moveId: String,
    val attackerId: String,
    val targetId: String,
    override val priority: Int,
    override val speed: Int,
) : BattleSessionQueuedActionPayload {
    /**
     * 当前入队动作的种类。
     */
    override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.MOVE
}

/**
 * switch action 入队事件 payload。
 *
 * @property sideId 发起换人的 side 标识。
 * @property outgoingUnitId 当前下场单位标识。
 * @property incomingUnitId 即将上场单位标识。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
data class BattleSessionSwitchQueuedPayload(
    val sideId: String,
    val outgoingUnitId: String,
    val incomingUnitId: String,
    override val priority: Int,
    override val speed: Int,
) : BattleSessionQueuedActionPayload {
    /**
     * 当前入队动作的种类。
     */
    override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.SWITCH
}

/**
 * item action 入队事件 payload。
 *
 * @property itemId 物品标识。
 * @property actorUnitId 使用者单位标识。
 * @property targetId 目标单位标识。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
data class BattleSessionItemQueuedPayload(
    val itemId: String,
    val actorUnitId: String,
    val targetId: String,
    override val priority: Int,
    override val speed: Int,
) : BattleSessionQueuedActionPayload {
    /**
     * 当前入队动作的种类。
     */
    override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.ITEM
}

/**
 * capture action 入队事件 payload。
 *
 * @property playerId 发起捕捉的玩家标识。
 * @property ballItemId 使用的球类道具标识。
 * @property sourceUnitId 扔球单位标识。
 * @property targetId 目标野生单位标识。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
data class BattleSessionCaptureQueuedPayload(
    val playerId: String,
    val ballItemId: String,
    val sourceUnitId: String,
    val targetId: String,
    override val priority: Int,
    override val speed: Int,
) : BattleSessionQueuedActionPayload {
    /**
     * 当前入队动作的种类。
     */
    override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.CAPTURE
}

/**
 * run action 入队事件 payload。
 *
 * @property sideId 发起逃跑的 side 标识。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
data class BattleSessionRunQueuedPayload(
    val sideId: String,
    override val priority: Int,
    override val speed: Int,
) : BattleSessionQueuedActionPayload {
    /**
     * 当前入队动作的种类。
     */
    override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.RUN
}

/**
 * wait action 入队事件 payload。
 *
 * @property unitId 发起等待的单位标识。
 * @property priority 当前动作优先级。
 * @property speed 当前动作排序速度。
 */
data class BattleSessionWaitQueuedPayload(
    val unitId: String,
    override val priority: Int,
    override val speed: Int,
) : BattleSessionQueuedActionPayload {
    /**
     * 当前入队动作的种类。
     */
    override val actionType: BattleSessionActionEventKind = BattleSessionActionEventKind.WAIT
}