1
0

Fixed some ACCEPT boxes in trades so only perfect matches are accept.

Moved "Offer" button to try and make it more clear when you need to submit a new offer

Fixed meetClicked to update the offer text and resource counts.

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-02-26 14:58:07 -08:00
parent 09690ee4e0
commit 1ca27a51f3
2 changed files with 60 additions and 29 deletions

View File

@ -102,11 +102,20 @@ const Trade = ({table}) => {
gives: offer.gets.slice(), gives: offer.gets.slice(),
gets: offer.gives.slice() gets: offer.gives.slice()
}; };
console.log(trade);
trade.gives.forEach(give => giveCount(give.type, give.count)); trade.gives.forEach(give => giveCount(give.type, give.count));
trade.gets.forEach(get => getCount(get.type, get.count)); trade.gets.forEach(get => getCount(get.type, get.count));
table.offerTrade(trade); table.offerTrade(trade);
}, [giveCount, getCount]); let tmp = {};
trade.gives.forEach(give => {
tmp[give.type] = give.count;
});
setGives(tmp);
tmp = {};
trade.gets.forEach(get => {
tmp[get.type] = get.count;
});
setGets(tmp);
}, [giveCount, getCount, setGives, setGets]);
if (!table.game) { if (!table.game) {
return (<></>); return (<></>);
@ -194,26 +203,44 @@ const Trade = ({table}) => {
if (table.game.turn.offer) { if (table.game.turn.offer) {
players.forEach(trade => { players.forEach(trade => {
let valid = trade.gets.length && trade.gives.length; trade.valid = trade.gets.length
trade.gets.forEach(resource => { && trade.gives.length
if (!valid) { && trade.gets.length === game.turn.offer.gives.length
&& trade.gives.length === game.turn.offer.gets.length;
if (!trade.valid) {
return;
}
trade.gets.forEach(get => {
if (!trade.valid) {
return; return;
} }
if (resource.type !== 'bank') { if (get.type !== 'bank') {
const offer = table.game.turn.offer.gives.find(item => item.type === resource.type); const offer = table.game.turn.offer.gives.find(give => give.type === get.type);
valid = offer && (offer.count >= resource.count); trade.valid = offer && (offer.count === get.count);
} else { } else {
valid = false;
/* Doesn't matter what the resource type is so long as there /* Doesn't matter what the resource type is so long as there
* are enough of the one kind */ * are enough of the one kind */
table.game.turn.offer.gives.forEach(offer => { trade.valid = table.game.turn.offer.gives[0].count === get.count;
if (offer.count >= resource.count) {
valid = true;
}
});
} }
}); });
trade.valid = valid;
if (!trade.valid) {
return;
}
trade.gives.forEach(give => {
if (!trade.valid) {
return;
}
if (give.type !== '*') {
const offer = table.game.turn.offer.gets.find(get => give.type === get.type);
trade.valid = offer && (offer.count === give.count);
} else {
/* Doesn't matter what the resource type is so long as there
* are enough of the one kind */
trade.valid = table.game.turn.offer.gets[0].count === give.count;
}
})
}); });
canAccept = true; canAccept = true;
@ -238,6 +265,7 @@ const Trade = ({table}) => {
</div> </div>
</div>; </div>;
} }
const gets = item.gets.map(get => const gets = item.gets.map(get =>
`${get.count} ${(get.type === 'bank') ? 'of any one resource' : get.type}`) `${get.count} ${(get.type === 'bank') ? 'of any one resource' : get.type}`)
.join(', '), .join(', '),
@ -281,6 +309,9 @@ const Trade = ({table}) => {
{ players } { players }
</div> </div>
{ !player.haveResources && <b>You have no resources to participate in this trade.</b> } { !player.haveResources && <b>You have no resources to participate in this trade.</b> }
<Button disabled={getLine === 'nothing' || giveLine === 'nothing'}
onClick={offerClicked}>Offer to give {giveLine} in exchange for {getLine}</Button>
{ player.haveResources && { player.haveResources &&
<div className='TradeLine' <div className='TradeLine'
style={{ style={{
@ -288,7 +319,7 @@ const Trade = ({table}) => {
alignItems: 'flex-start' alignItems: 'flex-start'
}}> }}>
<div style={{display: 'flex' }}> <div style={{display: 'flex' }}>
<b>You want to receive {getLine}.</b> <b>You want to receive {getLine}:</b>
</div> </div>
<div style={{display: 'flex' }}> <div style={{display: 'flex' }}>
<ResourceCounter count={gets.brick} onCount={getCount} type='brick'/> <ResourceCounter count={gets.brick} onCount={getCount} type='brick'/>
@ -298,7 +329,7 @@ const Trade = ({table}) => {
<ResourceCounter count={gets.stone} onCount={getCount} type='stone'/> <ResourceCounter count={gets.stone} onCount={getCount} type='stone'/>
</div> </div>
<div style={{display: 'flex' }}> <div style={{display: 'flex' }}>
<b>You are willing to give {giveLine}.</b> <b>You are willing to give {giveLine}:</b>
</div> </div>
<div style={{display: 'flex' }}> <div style={{display: 'flex' }}>
{ player.brick > 0 && <ResourceCounter count={gives.brick} onCount={giveCount} type='brick' max={player.brick}/> } { player.brick > 0 && <ResourceCounter count={gives.brick} onCount={giveCount} type='brick' max={player.brick}/> }
@ -309,8 +340,6 @@ const Trade = ({table}) => {
</div> </div>
</div> </div>
} }
<Button disabled={getLine === 'nothing' || giveLine === 'nothing'}
onClick={offerClicked}>Offer</Button>
{ isTurn && <Button onClick={cancelClicked}>cancel</Button> } { isTurn && <Button onClick={cancelClicked}>cancel</Button> }
</Paper> </Paper>
</div> </div>

View File

@ -1372,17 +1372,19 @@ const isSameOffer = (player, offer) => {
return same; return same;
}; };
const checkOffer = (game, player, offer) => { /* Verifies player can make the offer */
const checkPlayerOffer = (game, player, offer) => {
let error = undefined; let error = undefined;
console.log({ console.log({
player: getPlayerName(game, player), name: getPlayerName(game, player),
gets: player.gets,
gives: player.gives
}, {
name: offer.name,
gets: offer.gets, gets: offer.gets,
gives: offer.gives gives: offer.gives,
sheep: player.sheep,
wheat: player.wheat,
brick: player.brick,
stone: player.stone,
wood: player.wood,
}); });
offer.gives.forEach(give => { offer.gives.forEach(give => {
@ -1589,7 +1591,7 @@ router.put("/:id/:action/:value?", async (req, res) => {
if (value === 'offer') { if (value === 'offer') {
const offer = req.body; const offer = req.body;
error = checkOffer(game, session.player, offer); error = checkPlayerOffer(game, session.player, offer);
if (error) { if (error) {
break; break;
} }
@ -1632,7 +1634,7 @@ router.put("/:id/:action/:value?", async (req, res) => {
const offer = req.body; const offer = req.body;
let target; let target;
error = checkOffer(game, session.player, offer); error = checkPlayerOffer(game, session.player, offer);
if (error) { if (error) {
break; break;
} }