endgame logic; bug fix in gold chip for reserved cards
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user