diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx
index 5d8fc5b..659d5cd 100644
--- a/src/components/Card/Card.tsx
+++ b/src/components/Card/Card.tsx
@@ -1,11 +1,14 @@
import { v4 } from 'uuid';
import { CardProps } from '../../util/propTypes';
import { ResourceCost } from '../../util/types';
+import { useCurrentPlayer } from '../../util/useCurrentPlayer';
import { buyCardActions } from '../Player/ActionMethods';
-import { reserveCard } from '../Player/ActionMethods/reserveCardActions';
+import { hasMaxReserved, reserveCard } from '../Player/ActionMethods/reserveCardActions';
const { buyCard, tooExpensive } = buyCardActions;
export default function Card({ data, state, setState }: CardProps) {
+ const currentPlayer = useCurrentPlayer(state);
+
return (
@@ -21,14 +24,14 @@ export default function Card({ data, state, setState }: CardProps) {
{ state.actions.buyCard.active &&
}
{ state.actions.reserveCard.active &&
}
diff --git a/src/components/Gameboard/Gameboard.tsx b/src/components/Gameboard/Gameboard.tsx
index 5d519db..f8f5d78 100644
--- a/src/components/Gameboard/Gameboard.tsx
+++ b/src/components/Gameboard/Gameboard.tsx
@@ -1,6 +1,5 @@
// types, data, utils
-import { AppState, PlayerData, ResourceCost, SetActionType } from '../../util/types';
-import { setStateBuyCard, setStateGetChips, setStateReserveCard } from '../../util/stateSetters';
+import { AppState, ResourceCost } from '../../util/types';
import { useCallback, useEffect, useState } from 'react';
import { getChipsActions } from '../Player/ActionMethods';
import { StateProps } from '../../util/propTypes';
@@ -44,24 +43,6 @@ export default function Gameboard({ state, setState }: StateProps) {
})
}, [state]);
- const setActionState = useCallback((value: SetActionType, player?: PlayerData) => {
- if (!player?.turnActive) return;
-
- switch (value) {
- case 0:
- if (!state.actions.getChips.active) setState((prev) => setStateGetChips(prev));
- break;
- case 1:
- if (!state.actions.buyCard.active) setState((prev) => setStateBuyCard(prev));
- break;
- case 2:
- if (!state.actions.reserveCard.active) setState((prev) => setStateReserveCard(prev));
- break;
- default:
- break;
- }
- }, []);
-
// util functions, setup on mount
useEffect(() => {
initializeBoard(state, setState);
@@ -90,7 +71,7 @@ export default function Gameboard({ state, setState }: StateProps) {
-
+
)
}
diff --git a/src/components/Player/ActionMethods/buyCardActions.ts b/src/components/Player/ActionMethods/buyCardActions.ts
index 739085f..382a53e 100644
--- a/src/components/Player/ActionMethods/buyCardActions.ts
+++ b/src/components/Player/ActionMethods/buyCardActions.ts
@@ -1,6 +1,7 @@
import cardTierToKey from "../../../util/cardTierToKey";
+import { initialActions } from "../../../util/stateSetters";
import { turnOrderUtil } from "../../../util/turnOrderUtil";
-import { AppState, CardData, FullDeck, PlayerData, ResourceCost, setStateType } from "../../../util/types";
+import { AppState, CardData, PlayerData, ResourceCost, setStateType } from "../../../util/types";
import { useCurrentPlayer } from "../../../util/useCurrentPlayer";
export const tooExpensive = (card: CardData, state: AppState): boolean => {
@@ -99,7 +100,8 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType)
...prev.gameboard,
tradingResources: prev.gameboard.tradingResources,
cardRows: updatedRows
- }
+ },
+ actions: initialActions
}
})
}
\ No newline at end of file
diff --git a/src/components/Player/ActionMethods/reserveCardActions.ts b/src/components/Player/ActionMethods/reserveCardActions.ts
index 7ead0ee..91f2224 100644
--- a/src/components/Player/ActionMethods/reserveCardActions.ts
+++ b/src/components/Player/ActionMethods/reserveCardActions.ts
@@ -1,4 +1,5 @@
import cardTierToKey from "../../../util/cardTierToKey";
+import { initialActions } from "../../../util/stateSetters";
import { turnOrderUtil } from "../../../util/turnOrderUtil";
import { AppState, CardData, FullDeck, PlayerData, setStateType } from "../../../util/types";
import { useCurrentPlayer } from "../../../util/useCurrentPlayer";
@@ -53,6 +54,7 @@ export const reserveCard = (state: AppState, setState: setStateType, card: CardD
...prev,
round: (roundIncrement ? prev.round + 1 : prev.round),
players: newPlayers,
+ actions: initialActions,
gameboard: {
...prev.gameboard,
cardRows: newCardRows
diff --git a/src/components/Player/AllPlayers.tsx b/src/components/Player/AllPlayers.tsx
index 1ff5520..6c61687 100644
--- a/src/components/Player/AllPlayers.tsx
+++ b/src/components/Player/AllPlayers.tsx
@@ -1,19 +1,15 @@
-import Player from "./Player";
import { v4 } from "uuid";
-import "./AllPlayers.css"
+import Player from "./Player";
import { PlayerData } from "../../util/types";
-import { useState } from "react";
-import { AllPlayersProps } from "../../util/propTypes";
+import { StateProps } from "../../util/propTypes";
+import "./AllPlayers.css"
-export default function AllPlayers({ state, setState, setActionState }: AllPlayersProps) {
- const [activePlayer, setActivePlayer] = useState();
- const playerPool = state.players?.map((player: PlayerData) =>
);
+export default function AllPlayers({ state, setState }: StateProps) {
+ const playerPool = state.players?.map((player: PlayerData) =>
);
return (
- {
- playerPool
- }
+ { playerPool }
)
}
\ No newline at end of file
diff --git a/src/components/Player/Player.tsx b/src/components/Player/Player.tsx
index 90bde31..bb38d3a 100644
--- a/src/components/Player/Player.tsx
+++ b/src/components/Player/Player.tsx
@@ -4,34 +4,36 @@ import { useEffect, useState } from "react";
import { v4 } from "uuid";
import { hasMaxReserved } from "./ActionMethods/reserveCardActions";
import { hasMaxChips } from "./ActionMethods/getChipsActions";
+import { setStateAwaitAction, setStateBuyCard, setStateGetChips, setStateReserveCard } from "../../util/stateSetters";
-export default function Player({ player, state, setState, setActionState }: PlayerProps) {
+export default function Player({ player, state, setState }: PlayerProps) {
const [dynamic, setDynamic] = useState
();
const [prompt, setPrompt] = useState("Your turn! Select an action type below.");
- const [actionSelection, setActionSelection] = useState(-1);
useEffect(() => {
setDynamic(state.players.find((element: PlayerData) => element.id === player.id))
}, [state]);
- // sets action label back to default on setstate (round change)
- useEffect(() => {
- setActionState(-1, dynamic);
- }, [setState])
-
- useEffect(() => {
- setActionState(actionSelection, dynamic);
-
- if (state.actions.getChips.active) {
- setPrompt('Make your selection of up to three chips.');
- } else if (state.actions.buyCard.active) {
- setPrompt('Choose a card above to purchase.');
- } else if (state.actions.reserveCard.active) {
- setPrompt('Choose a card above to reserve.');
- } else {
- setPrompt("Your turn! Select an action type below.");
+ const handleClick = (actionSelection: number) => {
+ switch (actionSelection) {
+ case 0:
+ setState((prev) => setStateGetChips(prev));
+ setPrompt('Make your selection of up to three chips.');
+ break;
+ case 1:
+ setState((prev) => setStateBuyCard(prev));
+ setPrompt('Choose a card above to purchase.');
+ break;
+ case 2:
+ setState((prev) => setStateReserveCard(prev));
+ setPrompt('Choose a card above to reserve.');
+ break;
+ default:
+ setState((prev) => setStateAwaitAction(prev));
+ setPrompt("Your turn! Select an action type below.");
+ break;
}
- }, [actionSelection])
+ }
return (
@@ -45,9 +47,9 @@ export default function Player({ player, state, setState, setActionState }: Play
Score: {dynamic?.points}
{dynamic?.turnActive ? prompt : '...'}
-
-
-
+
+
+
diff --git a/src/util/propTypes.ts b/src/util/propTypes.ts
index 41ded0a..de669f6 100644
--- a/src/util/propTypes.ts
+++ b/src/util/propTypes.ts
@@ -17,7 +17,7 @@ export interface AllPlayersProps extends StateProps {
setActionState: (value: SetActionType, player?: PlayerData) => void
}
-export interface PlayerProps extends AllPlayersProps {
+export interface PlayerProps extends StateProps {
player: PlayerData
}