diff --git a/src/components/Gameboard/Gameboard.tsx b/src/components/Gameboard/Gameboard.tsx index 8dacdd9..c154356 100644 --- a/src/components/Gameboard/Gameboard.tsx +++ b/src/components/Gameboard/Gameboard.tsx @@ -1,5 +1,5 @@ // types, data, utils -import { AppState, ResourceCost } from '../../util/types'; +import { AppState, PlayerData, ResourceCost } from '../../util/types'; import { useCallback, useEffect, useState } from 'react'; import { getChipsActions } from '../Player/ActionMethods'; import { StateProps } from '../../util/propTypes'; @@ -14,10 +14,12 @@ import CardRow from '../Card/CardRow'; import SelectionView from '../Resources/SelectionView'; import { useCurrentPlayer } from '../../hooks/useCurrentPlayer'; import getTotalBuyingPower from '../../util/getTotalBuyingPower'; +import usePreviousPlayer from '../../hooks/usePreviousPlayer'; const { validateChips } = getChipsActions; export default function Gameboard({ state, setState }: StateProps) { const [view, setView] = useState(

Loading...

); + const [endgame, setEndgame] = useState(); // callbacks for lifting state const liftSelection = useCallback((value: keyof ResourceCost) => { @@ -51,12 +53,6 @@ export default function Gameboard({ state, setState }: StateProps) { useEffect(() => { setCardRows(state); - - for (let player of state.players) { - if (player.points >= 15) { - console.log('trigger endgame'); - } - } }, [state]) useEffect(() => { @@ -66,6 +62,27 @@ export default function Gameboard({ state, setState }: StateProps) { } }, [state.actions]) + useEffect(() => { + const previousPlayer = usePreviousPlayer(state); + if (previousPlayer && previousPlayer.points >= 15) setEndgame(previousPlayer); + }, [state]) + + useEffect(() => { + if (endgame) { + console.log('endgame!'); + + const currentPlayer = useCurrentPlayer(state); + if (!currentPlayer) return; + + if (currentPlayer.id <= endgame.id) { + let winner: PlayerData; + const winnerData = state.players; + winner = winnerData.sort((x,y) => x.points - y.points)[0]; + console.log(winner.name + ' wins!'); + } + } + }, [state, endgame]) + // displays state of board if data is populated, otherwise points to game constructor useEffect(() => { if (!state.players.length) { diff --git a/src/components/Player/ActionMethods/reserveCardActions.ts b/src/components/Player/ActionMethods/reserveCardActions.ts index 24b6ab8..5968a0b 100644 --- a/src/components/Player/ActionMethods/reserveCardActions.ts +++ b/src/components/Player/ActionMethods/reserveCardActions.ts @@ -29,25 +29,20 @@ export const reserveCard = (state: AppState, setState: setStateType, card: CardD 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 updatedPlayer = currentPlayer; updatedPlayer.reservedCards = currentPlayer.reservedCards ? [ ...currentPlayer.reservedCards, card ] : [card]; - if (prev.actions.reserveCard.includeGold) { + const newResources = prev.gameboard.tradingResources; + + if (prev.actions.reserveCard.includeGold && newResources.gold) { updatedPlayer.inventory = { ...currentPlayer.inventory, gold: currentPlayer.inventory.gold ? currentPlayer.inventory.gold + 1 : 1 } + + newResources.gold = newResources.gold - 1; } const idx = newPlayers.indexOf(currentPlayer);