From 33736c6659c1c25735143aa9538067e3bd3ade6f Mon Sep 17 00:00:00 2001
From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com>
Date: Sun, 24 Jul 2022 11:36:37 -0500
Subject: [PATCH] in progress: ui prompt on player component
---
src/App.tsx | 2 +-
src/components/Gameboard/Gameboard.tsx | 32 +++++++++---
src/components/Player/ActionMethods.ts | 2 +-
src/components/Player/Player.tsx | 43 +++++++++-------
src/util/initialState.ts | 29 -----------
src/util/stateSetters.ts | 70 ++++++++++++++++++++++++++
src/util/types.ts | 1 +
7 files changed, 123 insertions(+), 56 deletions(-)
delete mode 100644 src/util/initialState.ts
create mode 100644 src/util/stateSetters.ts
diff --git a/src/App.tsx b/src/App.tsx
index 9784a1e..b8a5d75 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -2,7 +2,7 @@ import { useState } from 'react'
import { BrowserRouter, Routes, Route } from 'react-router-dom'
import Gameboard from './components/Gameboard/Gameboard'
import GameConstructor from './util/GameConstructor';
-import { initialState } from './util/initialState';
+import { initialState } from './util/stateSetters';
import './App.css'
function App() {
diff --git a/src/components/Gameboard/Gameboard.tsx b/src/components/Gameboard/Gameboard.tsx
index 0450325..16a338a 100644
--- a/src/components/Gameboard/Gameboard.tsx
+++ b/src/components/Gameboard/Gameboard.tsx
@@ -1,10 +1,14 @@
-import { useCallback, useEffect, useState } from 'react';
+// types, data, utils
import { AppState, PlayerData, ResourceCost, SetActionType, StateProps } from '../../util/types';
+import { setStateBuyCard, setStateGetChips, setStateReserveCard } from '../../util/stateSetters';
+import { useCallback, useEffect, useState } from 'react';
+import Nobles from './Nobles';
+
+// components
import initializeBoard from '../../util/initializeBoard';
import AvailableChips from '../Resources/AvailableChips';
import AllPlayers from '../Player/AllPlayers';
import CardRow from '../Card/CardRow';
-import Nobles from './Nobles';
export default function Gameboard({ state, setState }: StateProps) {
const [view, setView] = useState(
Loading...
);
@@ -30,16 +34,27 @@ export default function Gameboard({ state, setState }: StateProps) {
}
}
})
-
- console.log(state);
}, []);
const setActionState = useCallback((value: SetActionType, player: PlayerData) => {
if (!player?.turnActive) return;
- console.log(player.name + SetActionType[value]);
+
+ 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 to set up initial board
+ // util functions, setup on mount
useEffect(() => {
initializeBoard(state, setState);
}, [])
@@ -69,6 +84,11 @@ export default function Gameboard({ state, setState }: StateProps) {
}
}, [state]);
+ // DEBUG
+ useEffect(() => {
+ console.log(state);
+ }, [state])
+
// render
return view
}
\ No newline at end of file
diff --git a/src/components/Player/ActionMethods.ts b/src/components/Player/ActionMethods.ts
index 97268a0..31c03df 100644
--- a/src/components/Player/ActionMethods.ts
+++ b/src/components/Player/ActionMethods.ts
@@ -1,7 +1,7 @@
import { AppState, PlayerData, ResourceCost, setStateType } from "../../util/types";
import { TurnOrderUtil } from "../../util/TurnOrderUtil";
-export const getChips = (resource: string, dynamic: PlayerData | undefined, setState: setStateType) => {
+export const getChips = (resource: string | Array, dynamic: PlayerData | undefined, setState: setStateType) => {
if (!dynamic || !dynamic?.turnActive) return;
setState((prev: AppState) => {
diff --git a/src/components/Player/Player.tsx b/src/components/Player/Player.tsx
index 6dab0c0..34af27d 100644
--- a/src/components/Player/Player.tsx
+++ b/src/components/Player/Player.tsx
@@ -1,6 +1,5 @@
import { PlayerData, SetActionType, StateProps } from "../../util/types"
import { useEffect, useState } from "react";
-import { getChips } from "./ActionMethods";
import { v4 } from "uuid";
interface PlayerProps extends StateProps {
@@ -10,23 +9,29 @@ interface PlayerProps extends StateProps {
export default function Player({ player, state, setState, setActionState }: PlayerProps) {
const [dynamic, setDynamic] = useState();
+ const [prompt, setPrompt] = useState("My turn!");
+ const [actionSelection, setActionSelection] = useState(-1);
useEffect(() => setDynamic(state.players.find((element: PlayerData) => element.id === player.id)), [state]);
- const handleSelection = (input: number) => {
- switch (input) {
- case 0:
- setActionState(SetActionType.GETCHIPS, player);
- getChips('ruby', dynamic, setState);
- break;
- case 1:
- setActionState(SetActionType.BUYCARD, player);
- break;
- default:
- setActionState(SetActionType.AWAIT, player);
- break;
- }
- }
+ useEffect(() => {
+ setActionState(actionSelection, dynamic);
+ setPrompt(() => {
+ switch (actionSelection) {
+ case -1:
+ return "My turn!"
+ case 0:
+ return "Select up to three different chips, or two of the same color."
+ case 1:
+ return "Buy a card from the ones above using your available resources."
+ case 2:
+ return "Choose a card from the ones above to reserve for later purchase. \
+ If you have less than ten chips, you may also pick up a gold chip."
+ default:
+ return ""
+ }
+ })
+ }, [actionSelection, prompt])
return (
@@ -36,10 +41,10 @@ export default function Player({ player, state, setState, setActionState }: Play
Is {player.starter || "not"} round starter
{/* Dynamic data from state */}
-
{dynamic?.turnActive ? "My turn!" : "..."}
-
-
-
+ {dynamic?.turnActive ?
{prompt}
:
...
}
+
+
+
diff --git a/src/util/initialState.ts b/src/util/initialState.ts
deleted file mode 100644
index d718873..0000000
--- a/src/util/initialState.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { CardData, NobleData, PlayerData } from "./types";
-import CardDeck from '../data/cards.json';
-
-export const initialState = {
- gameboard: {
- nobles: new Array,
- cardRows: {
- tierOne: new Array,
- tierTwo: new Array,
- tierThree: new Array,
- },
- tradingResources: {
- ruby: 7,
- sapphire: 7,
- emerald: 7,
- diamond: 7,
- onyx: 7,
- gold: 5
- },
- deck: CardDeck,
- },
- round: 1,
- players: new Array,
- actions: {
- buyCard: { active: false },
- getChips: { active: false },
- reserveCard: { active: false }
- }
-}
\ No newline at end of file
diff --git a/src/util/stateSetters.ts b/src/util/stateSetters.ts
new file mode 100644
index 0000000..6fe152f
--- /dev/null
+++ b/src/util/stateSetters.ts
@@ -0,0 +1,70 @@
+import { AppState, CardData, NobleData, PlayerData, ResourceCost } from "./types";
+import CardDeck from '../data/cards.json';
+
+export const initialState = {
+ gameboard: {
+ nobles: new Array,
+ cardRows: {
+ tierOne: new Array,
+ tierTwo: new Array,
+ tierThree: new Array,
+ },
+ tradingResources: {
+ ruby: 7,
+ sapphire: 7,
+ emerald: 7,
+ diamond: 7,
+ onyx: 7,
+ gold: 5
+ },
+ deck: CardDeck,
+ },
+ round: 1,
+ players: new Array,
+ actions: {
+ buyCard: { active: false },
+ getChips: { active: false },
+ reserveCard: { active: false }
+ }
+}
+
+export const setStateGetChips = (prev: AppState) => {
+ return {
+ ...prev,
+ actions: {
+ ...initialState.actions,
+ getChips: {
+ active: true,
+ selection: new Array,
+ valid: false
+ }
+ }
+ }
+}
+
+export const setStateBuyCard = (prev: AppState) => {
+ return {
+ ...prev,
+ actions: {
+ ...initialState.actions,
+ buyCard: {
+ active: true,
+ valid: false
+ }
+ }
+ }
+}
+
+export const setStateReserveCard = (prev: AppState) => {
+ return {
+ ...prev,
+ actions: {
+ ...initialState.actions,
+ reserveCard: {
+ active: true,
+ includeGold: false,
+ valid: false
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/util/types.ts b/src/util/types.ts
index d2dbd71..96a8a1e 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -34,6 +34,7 @@ interface StateActions {
active: boolean
selection?: CardData
includeGold?: boolean
+ valid?: boolean
confirm?: () => void
}
}