ViewCard is now functioning
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
c433c40c07
commit
f2bb05da98
@ -106,3 +106,11 @@ body {
|
|||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Table .ViewCard {
|
||||||
|
display: flex;
|
||||||
|
positin: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
@ -21,6 +21,7 @@ import { GameOrder } from "./GameOrder.js";
|
|||||||
import { Activities } from "./Activities.js";
|
import { Activities } from "./Activities.js";
|
||||||
import { SelectPlayer } from "./SelectPlayer.js";
|
import { SelectPlayer } from "./SelectPlayer.js";
|
||||||
import { PlayersStatus } from "./PlayersStatus.js";
|
import { PlayersStatus } from "./PlayersStatus.js";
|
||||||
|
import { ViewCard } from "./ViewCard.js";
|
||||||
import { Hand } from "./Hand.js";
|
import { Hand } from "./Hand.js";
|
||||||
|
|
||||||
import history from "./history.js";
|
import history from "./history.js";
|
||||||
@ -41,6 +42,7 @@ const Table = () => {
|
|||||||
const [players, setPlayers] = useState(undefined);
|
const [players, setPlayers] = useState(undefined);
|
||||||
const [player, setPlayer] = useState(undefined);
|
const [player, setPlayer] = useState(undefined);
|
||||||
const [buildActive, setBuildActive] = useState(false);
|
const [buildActive, setBuildActive] = useState(false);
|
||||||
|
const [cardActive, setCardActive] = useState(undefined);
|
||||||
const fields = [ 'id', 'state', 'color', 'name' ];
|
const fields = [ 'id', 'state', 'color', 'name' ];
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -301,7 +303,7 @@ const Table = () => {
|
|||||||
{ color && state === 'game-order' && <GameOrder/> }
|
{ color && state === 'game-order' && <GameOrder/> }
|
||||||
{ /* state === 'normal' && <Trade/> */ }
|
{ /* state === 'normal' && <Trade/> */ }
|
||||||
{ /* state === 'winner' && <Winner color={winner}/> */ }
|
{ /* state === 'winner' && <Winner color={winner}/> */ }
|
||||||
{ /* cardActive && <ViewCard card={cardActive}/> */ }
|
{ <ViewCard {...{cardActive, setCardActive }}/> }
|
||||||
|
|
||||||
{ /*isTurn && turn && turn.actions && game.turn.actions.indexOf('select-resources') !== -1 &&
|
{ /*isTurn && turn && turn.actions && game.turn.actions.indexOf('select-resources') !== -1 &&
|
||||||
<ChooseCard type={turn.active}/>
|
<ChooseCard type={turn.active}/>
|
||||||
@ -310,7 +312,7 @@ const Table = () => {
|
|||||||
<Board/>
|
<Board/>
|
||||||
<PlayersStatus/>
|
<PlayersStatus/>
|
||||||
<PlayersStatus active={true}/>
|
<PlayersStatus active={true}/>
|
||||||
<Hand {...{buildActive, setBuildActive}}/>
|
<Hand {...{buildActive, setBuildActive, setCardActive}}/>
|
||||||
</div>
|
</div>
|
||||||
<div className="Sidebar">
|
<div className="Sidebar">
|
||||||
{ name !== "" && <PlayerList/> }
|
{ name !== "" && <PlayerList/> }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useState, useEffect, useContext, useRef, useCallback } from "react";
|
import React, { useState, useEffect, useContext, useRef, useCallback, useMemo } from "react";
|
||||||
import Paper from '@material-ui/core/Paper';
|
import Paper from '@material-ui/core/Paper';
|
||||||
import List from '@material-ui/core/List';
|
import List from '@material-ui/core/List';
|
||||||
import ListItem from '@material-ui/core/ListItem';
|
import ListItem from '@material-ui/core/ListItem';
|
||||||
@ -22,7 +22,9 @@ const Chat = () => {
|
|||||||
const [startTime, setStartTime] = useState(0);
|
const [startTime, setStartTime] = useState(0);
|
||||||
|
|
||||||
const { ws, name } = useContext(GlobalContext);
|
const { ws, name } = useContext(GlobalContext);
|
||||||
|
const fields = useMemo(() => [
|
||||||
|
'chat', 'startTime'
|
||||||
|
], []);
|
||||||
const onWsMessage = (event) => {
|
const onWsMessage = (event) => {
|
||||||
const data = JSON.parse(event.data);
|
const data = JSON.parse(event.data);
|
||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
@ -54,9 +56,9 @@ const Chat = () => {
|
|||||||
if (!ws) { return; }
|
if (!ws) { return; }
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
type: 'get',
|
type: 'get',
|
||||||
fields: ['chat', 'startTime' ]
|
fields
|
||||||
}));
|
}));
|
||||||
}, [ws]);
|
}, [ws, fields]);
|
||||||
|
|
||||||
const chatKeyPress = useCallback((event) => {
|
const chatKeyPress = useCallback((event) => {
|
||||||
if (event.key === "Enter") {
|
if (event.key === "Enter") {
|
||||||
|
@ -1,21 +1,70 @@
|
|||||||
import React from "react";
|
import React, {useEffect, useContext, useMemo, useRef, useState,
|
||||||
import "./ViewCard.css";
|
useCallback} from "react";
|
||||||
|
import equal from "fast-deep-equal";
|
||||||
|
|
||||||
import Paper from '@material-ui/core/Paper';
|
import Paper from '@material-ui/core/Paper';
|
||||||
import Button from '@material-ui/core/Button';
|
import Button from '@material-ui/core/Button';
|
||||||
import Resource from './Resource.js';
|
|
||||||
|
|
||||||
const ViewCard = ({table, card}) => {
|
import "./ViewCard.css";
|
||||||
if (!table.game.player) {
|
import { Resource } from './Resource.js';
|
||||||
|
import { GlobalContext } from "./GlobalContext.js";
|
||||||
|
|
||||||
|
const ViewCard = ({cardActive, setCardActive}) => {
|
||||||
|
const { ws } = useContext(GlobalContext);
|
||||||
|
const [priv, setPriv] = useState(undefined);
|
||||||
|
const [turns, setTurns] = useState(0);
|
||||||
|
const fields = useMemo(() => [
|
||||||
|
'private', 'turns'
|
||||||
|
], []);
|
||||||
|
const onWsMessage = (event) => {
|
||||||
|
const data = JSON.parse(event.data);
|
||||||
|
switch (data.type) {
|
||||||
|
case 'game-update':
|
||||||
|
console.log(`view-card - game update`);
|
||||||
|
if ('private' in data.update && !equal(data.update.private, priv)) {
|
||||||
|
setPriv(data.update.private);
|
||||||
|
}
|
||||||
|
if ('turns' in data.update && data.update.turns !== turns) {
|
||||||
|
setTurns(data.update.turns);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const refWsMessage = useRef(onWsMessage);
|
||||||
|
useEffect(() => { refWsMessage.current = onWsMessage; });
|
||||||
|
useEffect(() => {
|
||||||
|
if (!ws) { return; }
|
||||||
|
const cbMessage = e => refWsMessage.current(e);
|
||||||
|
ws.addEventListener('message', cbMessage);
|
||||||
|
return () => {
|
||||||
|
ws.removeEventListener('message', cbMessage);
|
||||||
|
}
|
||||||
|
}, [ws, refWsMessage]);
|
||||||
|
useEffect(() => {
|
||||||
|
if (!ws) { return; }
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
type: 'get',
|
||||||
|
fields
|
||||||
|
}));
|
||||||
|
}, [ws, fields]);
|
||||||
|
|
||||||
|
const playCard = useCallback((event) => {
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
type: 'play-card',
|
||||||
|
card: cardActive
|
||||||
|
}));
|
||||||
|
}, [ws, cardActive]);
|
||||||
|
|
||||||
|
const close = (event) => {
|
||||||
|
setCardActive(undefined);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!cardActive) {
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const playCard = (event) => {
|
|
||||||
table.playCard(card);
|
|
||||||
}
|
|
||||||
const close = (event) => {
|
|
||||||
table.closeCard();
|
|
||||||
};
|
|
||||||
|
|
||||||
const capitalize = (string) => {
|
const capitalize = (string) => {
|
||||||
if (string === 'vp') {
|
if (string === 'vp') {
|
||||||
return 'Victory Point';
|
return 'Victory Point';
|
||||||
@ -28,10 +77,10 @@ const ViewCard = ({table, card}) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let description, lookup;
|
let description, lookup;
|
||||||
if (card.type === 'progress') {
|
if (cardActive.type === 'progress') {
|
||||||
lookup = `${card.type}-${card.card}`;
|
lookup = `${cardActive.type}-${cardActive.card}`;
|
||||||
} else {
|
} else {
|
||||||
lookup = card.type;
|
lookup = cardActive.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (lookup) {
|
switch (lookup) {
|
||||||
@ -56,7 +105,7 @@ const ViewCard = ({table, card}) => {
|
|||||||
<div>This is still limited by the number of roads you have. If you do not have enough roads
|
<div>This is still limited by the number of roads you have. If you do not have enough roads
|
||||||
remaining, or if there are no valid road building locations, the number of roads
|
remaining, or if there are no valid road building locations, the number of roads
|
||||||
you can place will be reduced.</div>
|
you can place will be reduced.</div>
|
||||||
<div>You currently have <b>{table.game.player.roads}</b> roads remaining.</div>
|
<div>You currently have <b>{priv.roads}</b> roads remaining.</div>
|
||||||
</>;
|
</>;
|
||||||
break;
|
break;
|
||||||
case 'progress-monopoly':
|
case 'progress-monopoly':
|
||||||
@ -77,31 +126,31 @@ const ViewCard = ({table, card}) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let canPlay = false;
|
let canPlay = false;
|
||||||
if (card.type === 'vp') {
|
if (cardActive.type === 'vp') {
|
||||||
let points = table.game.player.points;
|
let points = priv.points;
|
||||||
table.game.player.development.forEach(item => {
|
priv.development.forEach(item => {
|
||||||
if (item.type === 'vp') {
|
if (item.type === 'vp') {
|
||||||
points++;
|
points++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
canPlay = points >= 10;
|
canPlay = points >= 10;
|
||||||
if (!canPlay && !card.played) {
|
if (!canPlay && !cardActive.played) {
|
||||||
description = <>{description}<div>You do not have enough victory points to play this card yet. You can currently reach <b>{points}</b> points.</div></>;
|
description = <>{description}<div>You do not have enough victory points to play this card yet. You can currently reach <b>{points}</b> points.</div></>;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
canPlay = card.turn < table.game.turns;
|
canPlay = cardActive.turn < turns;
|
||||||
if (!canPlay) {
|
if (!canPlay) {
|
||||||
description = <>{description}<div>You can not play this card until your next turn.</div></>;
|
description = <>{description}<div>You can not play this card until your next turn.</div></>;
|
||||||
}
|
}
|
||||||
if (canPlay) {
|
if (canPlay) {
|
||||||
canPlay = table.game.player.playedCard !== table.game.turns;
|
canPlay = priv.playedCard !== turns;
|
||||||
if (!canPlay) {
|
if (!canPlay) {
|
||||||
description = <>{description}<div>You have already played a development card this turn.</div></>;
|
description = <>{description}<div>You have already played a development card this turn.</div></>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (card.played) {
|
if (cardActive.played) {
|
||||||
description = <>{description}<div>You have already played this card.</div></>;
|
description = <>{description}<div>You have already played this card.</div></>;
|
||||||
canPlay = false;
|
canPlay = false;
|
||||||
}
|
}
|
||||||
@ -109,12 +158,12 @@ const ViewCard = ({table, card}) => {
|
|||||||
return (
|
return (
|
||||||
<div className="ViewCard">
|
<div className="ViewCard">
|
||||||
<Paper>
|
<Paper>
|
||||||
<div className="Title">{capitalize(card.type)}</div>
|
<div className="Title">{capitalize(cardActive.type)}</div>
|
||||||
<div style={{display: 'flex', flexDirection: 'row'}}>
|
<div style={{display: 'flex', flexDirection: 'row'}}>
|
||||||
<Resource type={`${card.type}-${card.card}`} disabled count={1}/>
|
<Resource type={`${cardActive.type}-${cardActive.card}`} disabled count={1}/>
|
||||||
<div className="Description">{description}</div>
|
<div className="Description">{description}</div>
|
||||||
</div>
|
</div>
|
||||||
{ !card.played &&
|
{ !cardActive.played &&
|
||||||
<Button disabled={!canPlay}
|
<Button disabled={!canPlay}
|
||||||
onClick={playCard}>play</Button>
|
onClick={playCard}>play</Button>
|
||||||
}
|
}
|
||||||
@ -124,4 +173,4 @@ const ViewCard = ({table, card}) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ViewCard;
|
export {ViewCard};
|
Loading…
x
Reference in New Issue
Block a user