From adc653abbf8dff20ea66d6349472f15d8e1a452a Mon Sep 17 00:00:00 2001 From: Mikayla Dobson Date: Sat, 6 Aug 2022 19:14:40 -0500 Subject: [PATCH] defined logic for picking up noble, adding to score --- src/util/canPickUpNoble.ts | 22 ++++++++++++++++++++++ src/util/stateSetters.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/util/canPickUpNoble.ts diff --git a/src/util/canPickUpNoble.ts b/src/util/canPickUpNoble.ts new file mode 100644 index 0000000..2021bc4 --- /dev/null +++ b/src/util/canPickUpNoble.ts @@ -0,0 +1,22 @@ +import getTotalBuyingPower from "./getTotalBuyingPower"; +import { NobleData, PlayerData, ResourceCost } from "./types"; + +export const canPickUpNoble = (player: PlayerData, noble: NobleData) => { + const totalBuyingPower = getTotalBuyingPower(player); + const playerInventory = player.inventory; + + for (let key of Object.keys(totalBuyingPower)) { + const typedKey = key as keyof ResourceCost; + let coinValue = playerInventory[typedKey] || 0; + + if (!noble.resourceCost[typedKey]) continue; + // @ts-ignore + if ((totalBuyingPower[typedKey] - coinValue) >= noble.resourceCost[typedKey]) { + continue; + } else { + return; + } + } + + return noble; +} \ No newline at end of file diff --git a/src/util/stateSetters.ts b/src/util/stateSetters.ts index c3f8852..bdd05ca 100644 --- a/src/util/stateSetters.ts +++ b/src/util/stateSetters.ts @@ -1,5 +1,6 @@ import { AppState, CardData, NobleData, PlayerData, ResourceCost } from "./types"; import CardDeck from '../data/cards.json'; +import { useCurrentPlayer } from "./useCurrentPlayer"; export const initialActions = { buyCard: { active: false }, @@ -76,4 +77,30 @@ export const setStateReserveCard = (prev: AppState) => { } } } +} + +export const setStateGetNoble = (prev: AppState, noble: NobleData) => { + const currentPlayer = useCurrentPlayer(prev); + if (!currentPlayer) return prev; + + const updatedPlayer = { + ...currentPlayer, + nobles: [...currentPlayer.nobles, noble], + points: currentPlayer.points + 3 + } + + const idx = prev.players.indexOf(currentPlayer); + const newPlayers = prev.players; + newPlayers[idx] = updatedPlayer; + + const newNobles = prev.gameboard.nobles.filter((x: NobleData) => x.resourceCost !== noble.resourceCost); + + return { + ...prev, + players: newPlayers, + gameboard: { + ...prev.gameboard, + nobles: newNobles + } + } } \ No newline at end of file