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 }