Successfully played through full game
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
18b6cf0333
commit
3ed87d270e
@ -92,7 +92,7 @@ const Activities = ({ table }) => {
|
|||||||
return (
|
return (
|
||||||
<div className="Activities">
|
<div className="Activities">
|
||||||
{ list }
|
{ list }
|
||||||
{ normalPlay && mustDiscard === 0 && mustPlaceRobber &&
|
{ normalPlay && !mustDiscard && mustPlaceRobber &&
|
||||||
<div className="Requirement">{who} must move the Robber.</div>
|
<div className="Requirement">{who} must move the Robber.</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ const Activities = ({ table }) => {
|
|||||||
<div className="Requirement">{who} must select a player to steal from.</div>
|
<div className="Requirement">{who} must select a player to steal from.</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
{ normalPlay && mustDiscard !== 0 && <> { discarders } </> }
|
{ normalPlay && mustDiscard && <> { discarders } </> }
|
||||||
|
|
||||||
{ !isTurn && normalPlay &&
|
{ !isTurn && normalPlay &&
|
||||||
<div>It is <PlayerColor color={table.game.turn.color}/> {table.game.turn.name}'s turn.</div>
|
<div>It is <PlayerColor color={table.game.turn.color}/> {table.game.turn.name}'s turn.</div>
|
||||||
|
@ -146,15 +146,16 @@ const GameOrder = ({table}) => {
|
|||||||
for (let color in table.game.players) {
|
for (let color in table.game.players) {
|
||||||
const item = table.game.players[color],
|
const item = table.game.players[color],
|
||||||
name = getPlayerName(table.game.sessions, color);
|
name = getPlayerName(table.game.sessions, color);
|
||||||
|
if (!name) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!item.orderRoll) {
|
||||||
|
item.orderRoll = 0;
|
||||||
|
}
|
||||||
if (color === table.game.color) {
|
if (color === table.game.color) {
|
||||||
hasRolled = item.orderRoll !== 0;
|
hasRolled = item.orderRoll !== 0;
|
||||||
}
|
}
|
||||||
if (name) {
|
players.push({ name: name, color: color, ...item });
|
||||||
if (!item.orderRoll) {
|
|
||||||
item.orderRoll = 0;
|
|
||||||
}
|
|
||||||
players.push({ name: name, color: color, ...item });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
players.sort((A, B) => {
|
players.sort((A, B) => {
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
.Trade {
|
.Trade {
|
||||||
display: flex;
|
display: flex;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
right: 0;
|
||||||
right: 30rem;
|
|
||||||
bottom: 0;
|
|
||||||
top: 0;
|
top: 0;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -133,15 +131,24 @@
|
|||||||
padding: 2px 0;
|
padding: 2px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Trade .TradeLine .TradeText {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Trade .TradeLine .TradeText > div {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
/*
|
||||||
.Trade .TradeLine > div {
|
.Trade .TradeLine > div {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-right: 0.25rem;
|
margin-right: 0.25rem;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
.Trade .TradeLine > div > div {
|
|
||||||
margin-left: 0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Trade .TradeLine .Resource {
|
.Trade .TradeLine .Resource {
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useState, useCallback, useEffect } from "react";
|
import React, { useState, useCallback } from "react";
|
||||||
import "./Trade.css";
|
import "./Trade.css";
|
||||||
import { getPlayerName } from './Common.js';
|
import { getPlayerName } from './Common.js';
|
||||||
import PlayerColor from './PlayerColor.js';
|
import PlayerColor from './PlayerColor.js';
|
||||||
@ -63,7 +63,7 @@ const Trade = ({table}) => {
|
|||||||
type={resource}
|
type={resource}
|
||||||
count={gets[resource]}/>
|
count={gets[resource]}/>
|
||||||
</div>;
|
</div>;
|
||||||
}, [ gives, gets, transfer]);
|
}, [ gives, gets, transfer, player]);
|
||||||
|
|
||||||
const agreeClicked = useCallback((offer) => {
|
const agreeClicked = useCallback((offer) => {
|
||||||
const trade = {
|
const trade = {
|
||||||
@ -78,7 +78,7 @@ const Trade = ({table}) => {
|
|||||||
console.log(_gives, _gets);
|
console.log(_gives, _gets);
|
||||||
setGives(Object.assign({}, empty, _gives));
|
setGives(Object.assign({}, empty, _gives));
|
||||||
setGets(Object.assign({}, empty, _gets));
|
setGets(Object.assign({}, empty, _gets));
|
||||||
}, [setGives, setGets, table]);
|
}, [setGives, setGets, gives, gets, table]);
|
||||||
|
|
||||||
let transfers = [];
|
let transfers = [];
|
||||||
|
|
||||||
@ -99,7 +99,11 @@ const Trade = ({table}) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const isCompatibleOffer = (player, offer) => {
|
const isCompatibleOffer = (player, offer) => {
|
||||||
let valid = player.gets.length === offer.gives.length &&
|
let valid = player.gets &&
|
||||||
|
player.gives &&
|
||||||
|
offer.gets &&
|
||||||
|
offer.gives &&
|
||||||
|
player.gets.length === offer.gives.length &&
|
||||||
player.gives.length === offer.gets.length;
|
player.gives.length === offer.gets.length;
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
@ -126,8 +130,6 @@ const Trade = ({table}) => {
|
|||||||
return valid;
|
return valid;
|
||||||
};
|
};
|
||||||
|
|
||||||
const game = table.game;
|
|
||||||
|
|
||||||
const isTurn = (table.game.turn && table.game.turn.color === table.game.color) ? true : false;
|
const isTurn = (table.game.turn && table.game.turn.color === table.game.color) ? true : false;
|
||||||
|
|
||||||
const offerClicked = (event) => {
|
const offerClicked = (event) => {
|
||||||
@ -172,13 +174,17 @@ const Trade = ({table}) => {
|
|||||||
const item = table.game.players[color],
|
const item = table.game.players[color],
|
||||||
name = getPlayerName(table.game.sessions, color);
|
name = getPlayerName(table.game.sessions, color);
|
||||||
|
|
||||||
/* Only list players with an offer */
|
/* Only list players with an offer, unless it is the active player (see
|
||||||
if (table.game.turn.name !== name &&
|
* that you haven't submitted an offer) or the current turn player,
|
||||||
|
* or the player explicitly rejected the player's offer */
|
||||||
|
if (table.game.turn.name !== name && table.game.name !== name &&
|
||||||
|
!item.offerRejected &&
|
||||||
(!item.gets || item.gets.length === 0
|
(!item.gets || item.gets.length === 0
|
||||||
|| !item.gives || item.gives.lenght === 0)) {
|
|| !item.gives || item.gives.length === 0)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the active player already rejected this offer, hide it */
|
||||||
if (table.game.turn.name === name && item.negotiatorRejectedOffer) {
|
if (table.game.turn.name === name && item.negotiatorRejectedOffer) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -193,7 +199,7 @@ const Trade = ({table}) => {
|
|||||||
offerRejected: (table.game.turn.name !== name) ? (item.offerRejected ? true : false) : false,
|
offerRejected: (table.game.turn.name !== name) ? (item.offerRejected ? true : false) : false,
|
||||||
negotiatorRejectedOffer: item.negotiatorRejectedOffer
|
negotiatorRejectedOffer: item.negotiatorRejectedOffer
|
||||||
};
|
};
|
||||||
tmp.canSubmit = (item.gets.length && item.gives.length);
|
tmp.canSubmit = (tmp.gets.length && tmp.gives.length);
|
||||||
players.push(tmp);
|
players.push(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,11 +254,20 @@ const Trade = ({table}) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
players = players.map((item, index) => {
|
players = players.map((item, index) => {
|
||||||
|
/*
|
||||||
if (item.negotiatorRejectedOffer && isTurn) {
|
if (item.negotiatorRejectedOffer && isTurn) {
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
const rejected = (item.offerRejected || item.negotiatorRejectedOffer);
|
let youWereRejected = item.negotiatorRejectedOffer;
|
||||||
|
let youRejectedOffer;
|
||||||
|
if (isTurn && !item.self) {
|
||||||
|
youRejectedOffer = item.negotiatorRejectedOffer;
|
||||||
|
youWereRejected = item.offerRejected;
|
||||||
|
} else {
|
||||||
|
youRejectedOffer = player.offerRejected;
|
||||||
|
}
|
||||||
|
|
||||||
const _gets = item.gets.length ? item.gets.map((get, index) => <div key={`get-${get.type}-${index}`}>
|
const _gets = item.gets.length ? item.gets.map((get, index) => <div key={`get-${get.type}-${index}`}>
|
||||||
{ get.type === 'bank' && <div key={`get-bank-${index}`}><b>4</b> of any resource</div>}
|
{ get.type === 'bank' && <div key={`get-bank-${index}`}><b>4</b> of any resource</div>}
|
||||||
@ -266,15 +281,36 @@ const Trade = ({table}) => {
|
|||||||
return (
|
return (
|
||||||
<div className="TradeLine" key={`player-${item.name}-${index}`}>
|
<div className="TradeLine" key={`player-${item.name}-${index}`}>
|
||||||
<PlayerColor color={item.color}/>
|
<PlayerColor color={item.color}/>
|
||||||
{ rejected && <>Your offer to give {_gets} in exchange for {_gives} was rejected.</> }
|
<div className="TradeText">
|
||||||
{ !rejected && <>{item.self ? 'You' : item.name}</> }
|
{ item.self && <div>
|
||||||
{ !rejected && _gets && _gives &&
|
{ youWereRejected && <>Your offer to give {_gets} in exchange for {_gives} was rejected.</> }
|
||||||
<>{item.self ? ' want' : ' wants'} {_gets} and will give {_gives}.</>
|
{ !youWereRejected && _gets && _gives && <>You want {_gets} and will give {_gives}.</> }
|
||||||
}
|
{ !youWereRejected && (_gets === undefined || _gives === undefined) && <>
|
||||||
{ !rejected && (_gets === undefined || _gives === undefined) &&
|
You have not submitted a trade offer.
|
||||||
<>{item.self ? ' have' : ' has'} not submitted a trade offer.</>
|
</>}
|
||||||
}
|
</div> }
|
||||||
|
|
||||||
|
{ !item.self && <>
|
||||||
|
<div>
|
||||||
|
{ !youRejectedOffer && _gets && _gives && <>
|
||||||
|
{item.name} wants {_gets} and will give {_gives}.
|
||||||
|
</> }
|
||||||
|
|
||||||
|
{ (_gets === undefined || _gives === undefined) &&
|
||||||
|
<>{item.name} has not submitted a trade offer.</>
|
||||||
|
}
|
||||||
|
|
||||||
|
{ youRejectedOffer && <>
|
||||||
|
You rejected {item.name}'s offer to receive {_gets} in exchange for {_gives}.
|
||||||
|
</> }
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{ youWereRejected && <div>
|
||||||
|
{item.name} rejected your offer.
|
||||||
|
</div>}
|
||||||
|
|
||||||
|
</>}
|
||||||
|
</div>
|
||||||
<div className="TradeActions">
|
<div className="TradeActions">
|
||||||
{ !item.self && isTurn &&
|
{ !item.self && isTurn &&
|
||||||
<Button disabled={!item.valid}
|
<Button disabled={!item.valid}
|
||||||
@ -288,7 +324,7 @@ const Trade = ({table}) => {
|
|||||||
|
|
||||||
{ item.name !== 'The bank' && !item.self &&
|
{ item.name !== 'The bank' && !item.self &&
|
||||||
<Button disabled={!item.gets.length ||
|
<Button disabled={!item.gets.length ||
|
||||||
!item.gives.length || player.offerRejected}
|
!item.gives.length || youRejectedOffer}
|
||||||
onClick={() => rejectClicked(item)}>reject</Button>
|
onClick={() => rejectClicked(item)}>reject</Button>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user