endgame logic; bug fix in gold chip for reserved cards

This commit is contained in:
2022-08-19 13:35:23 -05:00
parent 4d3f6bfeb4
commit 134ab9a284
2 changed files with 29 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
// types, data, utils // types, data, utils
import { AppState, ResourceCost } from '../../util/types'; import { AppState, PlayerData, ResourceCost } from '../../util/types';
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { getChipsActions } from '../Player/ActionMethods'; import { getChipsActions } from '../Player/ActionMethods';
import { StateProps } from '../../util/propTypes'; import { StateProps } from '../../util/propTypes';
@@ -14,10 +14,12 @@ import CardRow from '../Card/CardRow';
import SelectionView from '../Resources/SelectionView'; import SelectionView from '../Resources/SelectionView';
import { useCurrentPlayer } from '../../hooks/useCurrentPlayer'; import { useCurrentPlayer } from '../../hooks/useCurrentPlayer';
import getTotalBuyingPower from '../../util/getTotalBuyingPower'; import getTotalBuyingPower from '../../util/getTotalBuyingPower';
import usePreviousPlayer from '../../hooks/usePreviousPlayer';
const { validateChips } = getChipsActions; const { validateChips } = getChipsActions;
export default function Gameboard({ state, setState }: StateProps) { export default function Gameboard({ state, setState }: StateProps) {
const [view, setView] = useState(<p>Loading...</p>); const [view, setView] = useState(<p>Loading...</p>);
const [endgame, setEndgame] = useState<PlayerData>();
// callbacks for lifting state // callbacks for lifting state
const liftSelection = useCallback((value: keyof ResourceCost) => { const liftSelection = useCallback((value: keyof ResourceCost) => {
@@ -51,12 +53,6 @@ export default function Gameboard({ state, setState }: StateProps) {
useEffect(() => { useEffect(() => {
setCardRows(state); setCardRows(state);
for (let player of state.players) {
if (player.points >= 15) {
console.log('trigger endgame');
}
}
}, [state]) }, [state])
useEffect(() => { useEffect(() => {
@@ -66,6 +62,27 @@ export default function Gameboard({ state, setState }: StateProps) {
} }
}, [state.actions]) }, [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 // displays state of board if data is populated, otherwise points to game constructor
useEffect(() => { useEffect(() => {
if (!state.players.length) { if (!state.players.length) {

View File

@@ -29,25 +29,20 @@ export const reserveCard = (state: AppState, setState: setStateType, card: CardD
setState((prev: AppState) => { setState((prev: AppState) => {
const { newPlayers, roundIncrement } = turnOrderUtil(prev, currentPlayer); 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; const updatedPlayer = currentPlayer;
updatedPlayer.reservedCards = currentPlayer.reservedCards ? [ updatedPlayer.reservedCards = currentPlayer.reservedCards ? [
...currentPlayer.reservedCards, card ...currentPlayer.reservedCards, card
] : [card]; ] : [card];
if (prev.actions.reserveCard.includeGold) { const newResources = prev.gameboard.tradingResources;
if (prev.actions.reserveCard.includeGold && newResources.gold) {
updatedPlayer.inventory = { updatedPlayer.inventory = {
...currentPlayer.inventory, ...currentPlayer.inventory,
gold: currentPlayer.inventory.gold ? currentPlayer.inventory.gold + 1 : 1 gold: currentPlayer.inventory.gold ? currentPlayer.inventory.gold + 1 : 1
} }
newResources.gold = newResources.gold - 1;
} }
const idx = newPlayers.indexOf(currentPlayer); const idx = newPlayers.indexOf(currentPlayer);