endgame logic; bug fix in gold chip for reserved cards
This commit is contained in:
@@ -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(<p>Loading...</p>);
|
||||
const [endgame, setEndgame] = useState<PlayerData>();
|
||||
|
||||
// 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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user