From 4c4d52b98399451cfc7cad202a3255b5b1a1ed4f Mon Sep 17 00:00:00 2001 From: Mikayla Dobson Date: Tue, 26 Jul 2022 13:02:38 -0500 Subject: [PATCH] buying a card spends appropriate number of a player's chips --- .../Player/ActionMethods/buyCardActions.ts | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/components/Player/ActionMethods/buyCardActions.ts b/src/components/Player/ActionMethods/buyCardActions.ts index cfbea74..533b76f 100644 --- a/src/components/Player/ActionMethods/buyCardActions.ts +++ b/src/components/Player/ActionMethods/buyCardActions.ts @@ -1,4 +1,4 @@ -import { AppState, CardData, setStateType } from "../../../util/types"; +import { AppState, CardData, PlayerData, ResourceCost, setStateType } from "../../../util/types"; import { useCurrentPlayer } from "../../../util/useCurrentPlayer"; export const tooExpensive = (card: CardData, state: AppState): boolean => { @@ -25,20 +25,49 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType) * @param card -> the target card, @param state -> current app state */ - const currentPlayer = useCurrentPlayer(state); - if (!currentPlayer) return; + console.log('called') + let currentPlayer = useCurrentPlayer(state); + console.log(currentPlayer); + setState((prev: AppState) => { - let updatedPlayer = { + if (!currentPlayer) return prev; + + let newInventory = currentPlayer.inventory; + for (let [gem, cost] of Object.entries(card.resourceCost)) { + if (cost < 1) continue; + + let i = cost; + let newInventoryValue = newInventory[gem as keyof ResourceCost]; + if (!newInventoryValue) continue; + + while (i > 0) { + newInventoryValue--; + i--; + } + + newInventory[gem as keyof ResourceCost] = newInventoryValue; + } + + let updatedPlayer: PlayerData = { ...currentPlayer, cards: [ ...currentPlayer.cards, card - ] + ], + inventory: newInventory } + let allPlayers = prev.players; + const idx = allPlayers.findIndex((one: PlayerData) => one.id === currentPlayer?.id); + + allPlayers[idx] = updatedPlayer; + return { - ...prev + ...prev, + players: allPlayers } }) + + console.log(state); } \ No newline at end of file