cleanup after refactoring action type functionality

This commit is contained in:
2022-07-31 13:00:14 -05:00
parent 6b79ce1be0
commit 1122336742
7 changed files with 46 additions and 60 deletions

View File

@@ -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 (
<div className={`card`}>
<div className="top-row">
@@ -21,14 +24,14 @@ export default function Card({ data, state, setState }: CardProps) {
{ state.actions.buyCard.active &&
<button
onClick={() => buyCard(data, state, setState)}
disabled={tooExpensive(data, state)}
>
disabled={tooExpensive(data, state)}>
Buy This Card
</button>
}
{ state.actions.reserveCard.active &&
<button
onClick={() => reserveCard(state, setState, data)}>
onClick={() => reserveCard(state, setState, data)}
disabled={hasMaxReserved(currentPlayer)}>
Reserve This Card
</button>
}

View File

@@ -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) {
<CardRow tier={1} state={state} setState={setState} />
<SelectionView state={state} setState={setState} />
<AvailableChips state={state} setState={setState} liftSelection={liftSelection} />
<AllPlayers state={state} setState={setState} setActionState={setActionState} />
<AllPlayers state={state} setState={setState} />
</div>
)
}

View File

@@ -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
}
})
}

View File

@@ -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

View File

@@ -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) => <Player key={v4()} player={player} state={state} setState={setState} setActionState={setActionState} />);
export default function AllPlayers({ state, setState }: StateProps) {
const playerPool = state.players?.map((player: PlayerData) => <Player key={v4()} player={player} state={state} setState={setState} />);
return (
<div className="all-players">
{
playerPool
}
{ playerPool }
</div>
)
}

View File

@@ -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<PlayerData>();
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) {
const handleClick = (actionSelection: number) => {
switch (actionSelection) {
case 0:
setState((prev) => setStateGetChips(prev));
setPrompt('Make your selection of up to three chips.');
} else if (state.actions.buyCard.active) {
break;
case 1:
setState((prev) => setStateBuyCard(prev));
setPrompt('Choose a card above to purchase.');
} else if (state.actions.reserveCard.active) {
break;
case 2:
setState((prev) => setStateReserveCard(prev));
setPrompt('Choose a card above to reserve.');
} else {
break;
default:
setState((prev) => setStateAwaitAction(prev));
setPrompt("Your turn! Select an action type below.");
break;
}
}
}, [actionSelection])
return (
<div className="player-ui" key={v4()}>
@@ -45,9 +47,9 @@ export default function Player({ player, state, setState, setActionState }: Play
<section className="turn-and-action-based">
<p>Score: {dynamic?.points}</p>
<p>{dynamic?.turnActive ? prompt : '...'}</p>
<button disabled={dynamic && hasMaxChips(dynamic)} onClick={() => setActionSelection(0)}>Get Chips</button>
<button onClick={() => setActionSelection(1)}>Buy Card</button>
<button disabled={dynamic && hasMaxReserved(dynamic)} onClick={() => setActionSelection(2)}>Reserve Card</button>
<button disabled={dynamic && hasMaxChips(dynamic)} onClick={() => handleClick(0)}>Get Chips</button>
<button onClick={() => handleClick(1)}>Buy Card</button>
<button disabled={dynamic && hasMaxReserved(dynamic)} onClick={() => handleClick(2)}>Reserve Card</button>
</section>
<section className="resources">

View File

@@ -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
}