From 3cc166932a01e9342d4a5b0b9c234f8ca3bcb39c Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Sun, 13 Mar 2022 16:58:15 -0700 Subject: [PATCH] Monopoly works Signed-off-by: James Ketrenos --- client/src/ChooseCard.js | 2 +- client/src/PlayersStatus.js | 81 +++++++++++++++++++++---------------- client/src/ViewCard.js | 3 +- server/routes/games.js | 17 ++++++-- 4 files changed, 64 insertions(+), 39 deletions(-) diff --git a/client/src/ChooseCard.js b/client/src/ChooseCard.js index 96f6792..e49652d 100644 --- a/client/src/ChooseCard.js +++ b/client/src/ChooseCard.js @@ -54,7 +54,7 @@ const ChooseCard = () => { type: 'select-resources', cards })); - }, [ws]); + }, [ws, cards]); const count = (turn && turn.active === 'monopoly') ? 1 : 2; diff --git a/client/src/PlayersStatus.js b/client/src/PlayersStatus.js index 651ee19..c26a3ed 100644 --- a/client/src/PlayersStatus.js +++ b/client/src/PlayersStatus.js @@ -9,7 +9,7 @@ import { Placard } from './Placard.js'; import { GlobalContext } from './GlobalContext.js'; const Player = ({ player, onClick, reverse, color, - largestArmy, largestArmySize, isSelf, longestRoad, longestRoadLength }) => { + largestArmy, isSelf, longestRoad }) => { if (!player) { return <>; } @@ -35,7 +35,7 @@ const Player = ({ player, onClick, reverse, color, disabled active={false} type='longest-road' - count={longestRoadLength} + count={player.longestRoad} /> : undefined; const largestArmyPlacard = largestArmy && largestArmy === color ? @@ -43,49 +43,51 @@ const Player = ({ player, onClick, reverse, color, disabled active={false} type='largest-army' - count={largestArmySize} + count={player.army} /> : undefined; return
-
- {player.name} -
-
- { isSelf && -
- Longest road: {player.longestRoad ? player.longestRoad : 0} -
- } -
{points}
- { (largestArmy || longestRoad || armyCards || developmentCards) && <> -
- { !reverse && <> - { largestArmyPlacard } - { longestRoadPlacard } - { !largestArmyPlacard && armyCards } - { developmentCards } - } - { reverse && <> - { developmentCards } - { !largestArmyPlacard && armyCards } - { longestRoadPlacard } - { largestArmyPlacard } - } -
- } -
-
- -
+
+ {player.name}
+
+ { isSelf && +
+ Longest road: {player.longestRoad ? player.longestRoad : 0} +
+ } +
{points}
+ { (largestArmy || longestRoad || armyCards || developmentCards) && <> +
+ { !reverse && <> + { largestArmyPlacard } + { longestRoadPlacard } + { !largestArmyPlacard && armyCards } + { developmentCards } + } + { reverse && <> + { developmentCards } + { !largestArmyPlacard && armyCards } + { longestRoadPlacard } + { largestArmyPlacard } + } +
+ } +
+
+ +
+
}; const PlayersStatus = ({ active }) => { const { ws } = useContext(GlobalContext); const [players, setPlayers] = useState(undefined); const [color, setColor] = useState(undefined); + const [largestArmy, setLargestArmy] = useState(undefined); + const [longestRoad, setLongestRoad] = useState(undefined); const fields = useMemo(() => [ - 'players', 'color' + 'players', 'color', 'longestRoad', 'largestArmy' ], []); const onWsMessage = (event) => { const data = JSON.parse(event.data); @@ -98,6 +100,12 @@ const PlayersStatus = ({ active }) => { if ('color' in data.update && data.update.color !== color) { setColor(data.update.color); } + if ('longestRoad' in data.update && data.update.longestRoad !== longestRoad) { + setLongestRoad(data.update.longestRoad); + } + if ('largestArmy' in data.update && data.update.largestArmy !== largestArmy) { + setLargestArmy(data.update.largestArmy); + } break; default: break; @@ -133,6 +141,9 @@ const PlayersStatus = ({ active }) => { player={players[color]} onClick={buildItem} reverse + largestArmy={largestArmy} + longestRoad={longestRoad} + isSelf={active} key={`PlayerStatus-${color}`} color={color}/>; } else { @@ -142,6 +153,8 @@ const PlayersStatus = ({ active }) => { .map(key => { return ; }); diff --git a/client/src/ViewCard.js b/client/src/ViewCard.js index 549832e..a40b714 100644 --- a/client/src/ViewCard.js +++ b/client/src/ViewCard.js @@ -55,7 +55,8 @@ const ViewCard = ({cardActive, setCardActive}) => { type: 'play-card', card: cardActive })); - }, [ws, cardActive]); + setCardActive(undefined); + }, [ws, cardActive, setCardActive]); const close = (event) => { setCardActive(undefined); diff --git a/server/routes/games.js b/server/routes/games.js index cd2c42b..d470f82 100755 --- a/server/routes/games.js +++ b/server/routes/games.js @@ -394,7 +394,7 @@ const processRoll = (game, session, dice) => { addChatMessage(game, null, `The robber was rolled and ${player.name} must discard ${player.mustDiscard} resource cards!`); for (let key in game.sessions) { if (game.sessions[key].player === player) { - sendUpdateToPlayer(game.sessions[key].player, { + sendUpdateToPlayer(game.sessions[key], { private: player }); break; @@ -1866,9 +1866,10 @@ const pass = (game, session) => { addChatMessage(game, null, `It is ${next}'s turn.`); sendUpdateToPlayers(game, { + turns: game.turns, turn: game.turn, chat: game.chat, - activites: game.activities + activities: game.activities }); } @@ -2173,7 +2174,8 @@ const playCard = (game, session, card) => { activities: game.activities, largestArmy: game.largestArmy, largestArmySize: game.largestArmySize, - turn: game.turn + turn: game.turn, + players: getFilteredPlayers(game) }); } @@ -2619,6 +2621,14 @@ const selectResources = (game, session, cards) => { session.resources += player[type]; total += player[type]; player[type] = 0; + for (let key in game.sessions) { + if (game.sessions[key].player === player) { + sendUpdateToPlayer(game.sessions[key], { + private: game.sessions[key].player + }); + break; + } + } } } @@ -3312,6 +3322,7 @@ router.ws("/ws/:id", async (ws, req) => { case 'chat': case 'startTime': case 'state': + case 'turns': update[field] = game[field]; break; case 'name':