Font tweaks and Trade layout
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
e59afc5d6d
commit
b66e1fb6e5
@ -7,7 +7,7 @@ import "./Actions.css";
|
|||||||
import { PlayerName } from './PlayerName.js';
|
import { PlayerName } from './PlayerName.js';
|
||||||
import { GlobalContext } from "./GlobalContext.js";
|
import { GlobalContext } from "./GlobalContext.js";
|
||||||
|
|
||||||
const Actions = ({buildActive, setBuildActive}) => {
|
const Actions = ({tradeActive, setTradeActive, buildActive, setBuildActive}) => {
|
||||||
const { ws, gameId, name } = useContext(GlobalContext);
|
const { ws, gameId, name } = useContext(GlobalContext);
|
||||||
const [state, setState] = useState('lobby');
|
const [state, setState] = useState('lobby');
|
||||||
const [color, setColor] = useState(undefined);
|
const [color, setColor] = useState(undefined);
|
||||||
@ -110,7 +110,13 @@ const Actions = ({buildActive, setBuildActive}) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const tradeClick = () => {
|
const tradeClick = () => {
|
||||||
sendMessage({ type: 'trade' });
|
if (!tradeActive) {
|
||||||
|
setTradeActive(true);
|
||||||
|
sendMessage({ type: 'trade' });
|
||||||
|
} else {
|
||||||
|
setTradeActive(false);
|
||||||
|
sendMessage({ type: 'trade', action: 'cancel', offer: undefined });
|
||||||
|
}
|
||||||
if (buildActive) setBuildActive(false);
|
if (buildActive) setBuildActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +152,15 @@ const Actions = ({buildActive, setBuildActive}) => {
|
|||||||
robberActions = (turn && turn.robberInAction),
|
robberActions = (turn && turn.robberInAction),
|
||||||
haveResources = priv ? priv.resources !== 0 : false,
|
haveResources = priv ? priv.resources !== 0 : false,
|
||||||
placement = (state === 'initial-placement' || (turn && turn.active === 'road-building')),
|
placement = (state === 'initial-placement' || (turn && turn.active === 'road-building')),
|
||||||
placeRoad = placement && turn && turn.actions && turn.actions.indexOf('place-road') !== -1;
|
placeRoad = placement && turn && turn.actions &&
|
||||||
|
(turn.actions.indexOf('place-road') !== -1
|
||||||
|
|| turn.actions.indexOf('place-city') !== -1
|
||||||
|
|| turn.actions.indexOf('place-settlement') !== -1);
|
||||||
|
if (tradeActive && (!turn || !turn.actions || turn.actions.indexOf('trade'))) {
|
||||||
|
setTradeActive(false);
|
||||||
|
} else if (!tradeActive && turn && turn.actions && turn.actions.indexOf('trade') !== -1) {
|
||||||
|
setTradeActive(true);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper className="Actions">
|
<Paper className="Actions">
|
||||||
|
@ -45,6 +45,7 @@ const Table = () => {
|
|||||||
const [color, setColor] = useState(undefined);
|
const [color, setColor] = useState(undefined);
|
||||||
const [priv, setPriv] = useState(undefined);
|
const [priv, setPriv] = useState(undefined);
|
||||||
const [buildActive, setBuildActive] = useState(false);
|
const [buildActive, setBuildActive] = useState(false);
|
||||||
|
const [tradeActive, setTradeActive] = useState(false);
|
||||||
const [cardActive, setCardActive] = useState(undefined);
|
const [cardActive, setCardActive] = useState(undefined);
|
||||||
const [winnerDismissed, setWinnerDismissed] = useState(undefined);
|
const [winnerDismissed, setWinnerDismissed] = useState(undefined);
|
||||||
const [global, setGlobal] = useState({});
|
const [global, setGlobal] = useState({});
|
||||||
@ -347,10 +348,10 @@ const Table = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="Sidebar">
|
<div className="Sidebar">
|
||||||
{ name !== "" && <PlayerList/> }
|
{ name !== "" && <PlayerList/> }
|
||||||
<Trade/>
|
<Trade {...{tradeActive, setTradeActive}}/>
|
||||||
{ name !== "" && <Chat/> }
|
{ name !== "" && <Chat/> }
|
||||||
{ /* name !== "" && <VideoFeeds/> */ }
|
{ /* name !== "" && <VideoFeeds/> */ }
|
||||||
{ loaded && <Actions {...{buildActive, setBuildActive}}/> }
|
{ loaded && <Actions {...{buildActive, setBuildActive, tradeActive, setTradeActive}}/> }
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</GlobalContext.Provider>;
|
</GlobalContext.Provider>;
|
||||||
|
@ -22,9 +22,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.Trade .PlayerList {
|
.Trade .PlayerList {
|
||||||
padding: 0.5em;
|
padding: 0;
|
||||||
background-color:rgba(224, 224, 224);
|
background-color:rgba(224, 224, 224);
|
||||||
margin: 0.5rem 0;
|
margin: 0.25rem 0;
|
||||||
|
font-size: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Trade .Resource {
|
.Trade .Resource {
|
||||||
@ -104,10 +105,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.Trade .PlayerColor {
|
.Trade .PlayerColor {
|
||||||
align-self: flex-start;
|
align-self: center;
|
||||||
width: 0.75em;
|
width: 0.75em;
|
||||||
height: 0.75em;
|
height: 0.75em;
|
||||||
margin: 1rem 0.25rem 0 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.Trade .Transfer {
|
.Trade .Transfer {
|
||||||
@ -118,10 +118,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.Trade .Transfers {
|
.Trade .Transfers {
|
||||||
|
font-size: 0.75em;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-items: flex-start;
|
justify-items: flex-start;
|
||||||
margin: 0.25rem 0;
|
margin: 0.5rem 0;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Trade .Transfers .GiveGet {
|
.Trade .Transfers .GiveGet {
|
||||||
@ -182,7 +184,11 @@
|
|||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 2px 0;
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Trade .TradeLine:last-child {
|
||||||
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Trade .TradeLine .TradeText {
|
.Trade .TradeLine .TradeText {
|
||||||
@ -190,6 +196,7 @@
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
padding: 0.25em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Trade .TradeText > span {
|
.Trade .TradeText > span {
|
||||||
@ -200,10 +207,6 @@
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Trade .TradeText > span:first-of-type {
|
|
||||||
min-height: 3.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Trade .TradeLine .Resource {
|
.Trade .TradeLine .Resource {
|
||||||
height: 1.5em;
|
height: 1.5em;
|
||||||
width: 1.5em;
|
width: 1.5em;
|
||||||
|
@ -314,22 +314,10 @@ const Trade = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
activeTrades.sort((A, B) => {
|
activeTrades.sort((A, B) => {
|
||||||
if (A.negotiator) {
|
if (A.negotiator) { return -1; }
|
||||||
return -1;
|
if (B.negotiator) { return +1; }
|
||||||
}
|
if (A.self) { return -1; }
|
||||||
|
if (B.self) { return +1; }
|
||||||
if (B.negotiator) {
|
|
||||||
return +1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (A.self) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (B.self) {
|
|
||||||
return +1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return A.name.localeCompare(B.name);
|
return A.name.localeCompare(B.name);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -517,23 +505,18 @@ const Trade = () => {
|
|||||||
return (
|
return (
|
||||||
<div className="Trade">
|
<div className="Trade">
|
||||||
<Paper>
|
<Paper>
|
||||||
<div className="Title">
|
|
||||||
Trading negotiations {isTurn ? '' : `with ${turn.name}`}
|
|
||||||
</div>
|
|
||||||
<div className="PlayerList">
|
<div className="PlayerList">
|
||||||
{ tradeElements }
|
{ tradeElements }
|
||||||
</div>
|
</div>
|
||||||
{ priv.resources === 0 && <b>You have no resources to participate in this trade.</b> }
|
{ priv.resources === 0 && <div>
|
||||||
<Button className="OfferButton" disabled={isOfferSubmitted || !isOfferValid}
|
<b>You have no resources to participate in this trade.</b>
|
||||||
onClick={offerClicked}>Offer</Button>
|
</div> }
|
||||||
|
|
||||||
{ priv.resources !== 0 &&
|
{ priv.resources !== 0 &&
|
||||||
<div className="Transfers">
|
<div className="Transfers">
|
||||||
<div className="GiveGet"><div>Get</div><div>Give</div><div>Have</div></div>
|
<div className="GiveGet"><div>Get</div><div>Give</div><div>Have</div></div>
|
||||||
{ transfers }
|
{ transfers }
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
{ isTurn && <Button className="CancelButton"onClick={cancelClicked}>cancel</Button> }
|
|
||||||
</Paper>
|
</Paper>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -3054,6 +3054,7 @@ const saveGame = async (game) => {
|
|||||||
delete reducedGame.unselected;
|
delete reducedGame.unselected;
|
||||||
|
|
||||||
/* Save per turn while debugging... */
|
/* Save per turn while debugging... */
|
||||||
|
game.step = game.step ? game.step : 0;
|
||||||
await writeFile(`games/${game.id}.${game.step++}`, JSON.stringify(reducedGame, null, 2))
|
await writeFile(`games/${game.id}.${game.step++}`, JSON.stringify(reducedGame, null, 2))
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error(`${session.id} Unable to write to games/${game.id}`);
|
console.error(`${session.id} Unable to write to games/${game.id}`);
|
||||||
@ -3749,7 +3750,9 @@ router.ws("/ws/:id", async (ws, req) => {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'trade':
|
case 'trade':
|
||||||
console.log(`${short}: <- trade:${getName(session)} - ${data.action} - `, data.offer ? data.offer : 'no trade yet');
|
console.log(`${short}: <- trade:${getName(session)} - ` +
|
||||||
|
(data.action ? data.action : 'start') + ` - `,
|
||||||
|
data.offer ? data.offer : 'no trade yet');
|
||||||
warning = trade(game, session, data.action, data.offer);
|
warning = trade(game, session, data.action, data.offer);
|
||||||
if (warning) {
|
if (warning) {
|
||||||
sendWarning(session, warning);
|
sendWarning(session, warning);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user