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);