1
0

Monopoly works

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-13 16:58:15 -07:00
parent bca1a15149
commit 3cc166932a
4 changed files with 64 additions and 39 deletions

View File

@ -54,7 +54,7 @@ const ChooseCard = () => {
type: 'select-resources', type: 'select-resources',
cards cards
})); }));
}, [ws]); }, [ws, cards]);
const count = (turn && turn.active === 'monopoly') ? 1 : 2; const count = (turn && turn.active === 'monopoly') ? 1 : 2;

View File

@ -9,7 +9,7 @@ import { Placard } from './Placard.js';
import { GlobalContext } from './GlobalContext.js'; import { GlobalContext } from './GlobalContext.js';
const Player = ({ player, onClick, reverse, color, const Player = ({ player, onClick, reverse, color,
largestArmy, largestArmySize, isSelf, longestRoad, longestRoadLength }) => { largestArmy, isSelf, longestRoad }) => {
if (!player) { if (!player) {
return <></>; return <></>;
} }
@ -35,7 +35,7 @@ const Player = ({ player, onClick, reverse, color,
disabled disabled
active={false} active={false}
type='longest-road' type='longest-road'
count={longestRoadLength} count={player.longestRoad}
/> : undefined; /> : undefined;
const largestArmyPlacard = largestArmy && largestArmy === color ? const largestArmyPlacard = largestArmy && largestArmy === color ?
@ -43,7 +43,7 @@ const Player = ({ player, onClick, reverse, color,
disabled disabled
active={false} active={false}
type='largest-army' type='largest-army'
count={largestArmySize} count={player.army}
/> : undefined; /> : undefined;
return <div className="Player"> return <div className="Player">
@ -84,8 +84,10 @@ const PlayersStatus = ({ active }) => {
const { ws } = useContext(GlobalContext); const { ws } = useContext(GlobalContext);
const [players, setPlayers] = useState(undefined); const [players, setPlayers] = useState(undefined);
const [color, setColor] = useState(undefined); const [color, setColor] = useState(undefined);
const [largestArmy, setLargestArmy] = useState(undefined);
const [longestRoad, setLongestRoad] = useState(undefined);
const fields = useMemo(() => [ const fields = useMemo(() => [
'players', 'color' 'players', 'color', 'longestRoad', 'largestArmy'
], []); ], []);
const onWsMessage = (event) => { const onWsMessage = (event) => {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
@ -98,6 +100,12 @@ const PlayersStatus = ({ active }) => {
if ('color' in data.update && data.update.color !== color) { if ('color' in data.update && data.update.color !== color) {
setColor(data.update.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; break;
default: default:
break; break;
@ -133,6 +141,9 @@ const PlayersStatus = ({ active }) => {
player={players[color]} player={players[color]}
onClick={buildItem} onClick={buildItem}
reverse reverse
largestArmy={largestArmy}
longestRoad={longestRoad}
isSelf={active}
key={`PlayerStatus-${color}`} key={`PlayerStatus-${color}`}
color={color}/>; color={color}/>;
} else { } else {
@ -142,6 +153,8 @@ const PlayersStatus = ({ active }) => {
.map(key => { .map(key => {
return <Player return <Player
player={players[key]} player={players[key]}
largestArmy={largestArmy}
longestRoad={longestRoad}
key={`PlayerStatus-${key}}`} key={`PlayerStatus-${key}}`}
color={key}/>; color={key}/>;
}); });

View File

@ -55,7 +55,8 @@ const ViewCard = ({cardActive, setCardActive}) => {
type: 'play-card', type: 'play-card',
card: cardActive card: cardActive
})); }));
}, [ws, cardActive]); setCardActive(undefined);
}, [ws, cardActive, setCardActive]);
const close = (event) => { const close = (event) => {
setCardActive(undefined); setCardActive(undefined);

View File

@ -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!`); addChatMessage(game, null, `The robber was rolled and ${player.name} must discard ${player.mustDiscard} resource cards!`);
for (let key in game.sessions) { for (let key in game.sessions) {
if (game.sessions[key].player === player) { if (game.sessions[key].player === player) {
sendUpdateToPlayer(game.sessions[key].player, { sendUpdateToPlayer(game.sessions[key], {
private: player private: player
}); });
break; break;
@ -1866,9 +1866,10 @@ const pass = (game, session) => {
addChatMessage(game, null, `It is ${next}'s turn.`); addChatMessage(game, null, `It is ${next}'s turn.`);
sendUpdateToPlayers(game, { sendUpdateToPlayers(game, {
turns: game.turns,
turn: game.turn, turn: game.turn,
chat: game.chat, chat: game.chat,
activites: game.activities activities: game.activities
}); });
} }
@ -2173,7 +2174,8 @@ const playCard = (game, session, card) => {
activities: game.activities, activities: game.activities,
largestArmy: game.largestArmy, largestArmy: game.largestArmy,
largestArmySize: game.largestArmySize, 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]; session.resources += player[type];
total += player[type]; total += player[type];
player[type] = 0; 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 'chat':
case 'startTime': case 'startTime':
case 'state': case 'state':
case 'turns':
update[field] = game[field]; update[field] = game[field];
break; break;
case 'name': case 'name':