From 94f7f2c75c3638ffbdeeafdfc101a5dfc70a8bd4 Mon Sep 17 00:00:00 2001 From: Mikayla Dobson Date: Tue, 26 Jul 2022 13:22:01 -0500 Subject: [PATCH] player's spent resources are allocated back to global resource pool --- .../Player/ActionMethods/buyCardActions.ts | 28 ++++++++++++------- .../Player/ActionMethods/getChipsActions.ts | 14 ++++++---- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/components/Player/ActionMethods/buyCardActions.ts b/src/components/Player/ActionMethods/buyCardActions.ts index da05f85..1f03837 100644 --- a/src/components/Player/ActionMethods/buyCardActions.ts +++ b/src/components/Player/ActionMethods/buyCardActions.ts @@ -26,8 +26,6 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType) * @param card -> the target card, @param state -> current app state */ - console.log('called') - let currentPlayer = useCurrentPlayer(state); console.log(currentPlayer); @@ -35,19 +33,27 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType) if (!currentPlayer) return prev; const { newPlayers, roundIncrement } = turnOrderUtil(prev, currentPlayer); - let newInventory = currentPlayer.inventory; + + let newPlayerInventory = currentPlayer.inventory; + let newResourcePool = prev.gameboard.tradingResources; for (let [gem, cost] of Object.entries(card.resourceCost)) { if (cost < 1) continue; + + let resourceToReplenish = newResourcePool[gem as keyof ResourceCost]; + let newInventoryValue = newPlayerInventory[gem as keyof ResourceCost]; + if (!newInventoryValue || !resourceToReplenish) 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; + + resourceToReplenish += cost; + + newPlayerInventory[gem as keyof ResourceCost] = newInventoryValue; + newResourcePool[gem as keyof ResourceCost] = resourceToReplenish; } let updatedPlayer: PlayerData = { @@ -56,7 +62,7 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType) ...currentPlayer.cards, card ], - inventory: newInventory + inventory: newPlayerInventory } let newScore = updatedPlayer.points; @@ -71,10 +77,12 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType) return { ...prev, + gameboard: { + ...prev.gameboard, + tradingResources: prev.gameboard.tradingResources + }, round: (roundIncrement ? prev.round + 1 : prev.round), players: newPlayers } }) - - console.log(state); } \ No newline at end of file diff --git a/src/components/Player/ActionMethods/getChipsActions.ts b/src/components/Player/ActionMethods/getChipsActions.ts index a5419a9..3f60ba5 100644 --- a/src/components/Player/ActionMethods/getChipsActions.ts +++ b/src/components/Player/ActionMethods/getChipsActions.ts @@ -6,16 +6,20 @@ import { initialActions } from "../../../util/stateSetters"; export const validateChips = (state: AppState): boolean => { if (!state.actions.getChips.active || !state.actions.getChips.selection) return false; - const selection = state.actions.getChips.selection; - - if (selection.length === 0 || selection.length > 3) return false; - const unique = new Set(selection); + // requires a selection to be made, and less than three chips to be selected + if (selection.length === 0 || selection.length > 3) return false; + + // ensures correct handling of duplicate chips + const unique = new Set(selection); if (selection.length === 3 && selection.length > unique.size) return false; - let globalResourceCopy = { ...state.gameboard.tradingResources } + // allows only one gold chip to be collected at a time + if (selection.includes('gold') && unique.size > 1) return false; + // ensures the player cannot collect unavailable resources + let globalResourceCopy = { ...state.gameboard.tradingResources } for (let item of selection) { for (let key of Object.keys(globalResourceCopy)) { if (item === key) {