UNPKG

binmat

Version:
30 lines (29 loc) 1.39 kB
import { shuffle } from "@samual/lib/shuffle" import { StatusCode, Role, AttackerDeck, AttackerDiscardPile } from "./shared.js" function doMoveDraw(state, deckToDrawFrom) { if (state.turn >= state.turns) return { status: StatusCode.MadeMoveOnFinishedGame } const roleTurn = (state.turn % 2) + 1 if (roleTurn == Role.Defender) { if (deckToDrawFrom == AttackerDeck) return { status: StatusCode.DefenderDrewFromAttackerDeck } } else if (deckToDrawFrom != AttackerDeck && state.defenderStacks[deckToDrawFrom].cards.length) return { status: StatusCode.AttackerDrewFromBlockedLane } const deck = deckToDrawFrom == AttackerDeck ? state.attackerDeck : state.laneDecks[deckToDrawFrom] if (!deck.length) { const discardPile = deckToDrawFrom == AttackerDiscardPile ? state.attackerDiscardPile : state.laneDiscardPiles[deckToDrawFrom] if (!discardPile.length) return deckToDrawFrom == AttackerDeck ? { status: StatusCode.AttackerDrewFromEmptyDiscardAndDeck } : { status: StatusCode.AttackerWin } deck.push(...shuffle(discardPile.splice(0))) } const cardDrawn = deck.pop() return ( roleTurn == Role.Defender ? state.defenderHand.push(cardDrawn) : state.attackerHand.push(cardDrawn), state.turn++, state.turn == state.turns ? { status: StatusCode.DefenderWin, cardDrawn: cardDrawn } : { status: StatusCode.Ok, cardDrawn: cardDrawn } ) } export { doMoveDraw }