reserve card action defined
This commit is contained in:
@@ -1,7 +1,62 @@
|
||||
import { AppState } from "../../../util/types";
|
||||
import cardTierToKey from "../../../util/cardTierToKey";
|
||||
import { turnOrderUtil } from "../../../util/turnOrderUtil";
|
||||
import { AppState, CardData, FullDeck, PlayerData, setStateType } from "../../../util/types";
|
||||
import { useCurrentPlayer } from "../../../util/useCurrentPlayer";
|
||||
|
||||
export const reserveCard = (state: AppState) => {
|
||||
export const goldAllowable = (player: PlayerData | null): boolean => {
|
||||
if (!player) return false;
|
||||
let chipCount = 0;
|
||||
for (let quantity of Object.values(player.inventory)) {
|
||||
chipCount += quantity;
|
||||
}
|
||||
|
||||
if (chipCount >= 10) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
export const hasMaxReserved = (player: PlayerData | null): boolean => {
|
||||
if (!player) return true;
|
||||
if (player.reservedCards && player.reservedCards.length >= 3) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
export const reserveCard = (state: AppState, setState: setStateType, card: CardData) => {
|
||||
const currentPlayer = useCurrentPlayer(state);
|
||||
console.log(currentPlayer);
|
||||
if (!currentPlayer) return;
|
||||
if (hasMaxReserved(currentPlayer)) return;
|
||||
|
||||
setState((prev: AppState) => {
|
||||
const { newPlayers, roundIncrement } = turnOrderUtil(prev, currentPlayer);
|
||||
|
||||
const updatedPlayer = {
|
||||
...currentPlayer,
|
||||
reservedCards: currentPlayer.reservedCards ? [
|
||||
...currentPlayer.reservedCards, card
|
||||
] : [card],
|
||||
inventory: goldAllowable(currentPlayer) ? {
|
||||
...currentPlayer.inventory,
|
||||
gold: currentPlayer.inventory.gold && currentPlayer.inventory.gold + 1
|
||||
} : currentPlayer.inventory
|
||||
}
|
||||
|
||||
const idx = newPlayers.indexOf(currentPlayer);
|
||||
newPlayers[idx] = updatedPlayer;
|
||||
|
||||
const newCardRows = prev.gameboard.cardRows;
|
||||
const targetTier: keyof FullDeck = cardTierToKey(card.tier);
|
||||
|
||||
let updatedRow = newCardRows[targetTier];
|
||||
updatedRow = updatedRow.filter((each: CardData) => each.resourceCost !== card.resourceCost);
|
||||
newCardRows[targetTier] = updatedRow;
|
||||
|
||||
return {
|
||||
...prev,
|
||||
round: (roundIncrement ? prev.round + 1 : prev.round),
|
||||
players: newPlayers,
|
||||
gameboard: {
|
||||
...prev.gameboard,
|
||||
cardRows: newCardRows
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user