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:
parent
09690ee4e0
commit
1ca27a51f3
@ -102,11 +102,20 @@ const Trade = ({table}) => {
|
||||
gives: offer.gets.slice(),
|
||||
gets: offer.gives.slice()
|
||||
};
|
||||
console.log(trade);
|
||||
trade.gives.forEach(give => giveCount(give.type, give.count));
|
||||
trade.gets.forEach(get => getCount(get.type, get.count));
|
||||
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) {
|
||||
return (<></>);
|
||||
@ -194,26 +203,44 @@ const Trade = ({table}) => {
|
||||
|
||||
if (table.game.turn.offer) {
|
||||
players.forEach(trade => {
|
||||
let valid = trade.gets.length && trade.gives.length;
|
||||
trade.gets.forEach(resource => {
|
||||
if (!valid) {
|
||||
trade.valid = trade.gets.length
|
||||
&& trade.gives.length
|
||||
&& 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;
|
||||
}
|
||||
if (resource.type !== 'bank') {
|
||||
const offer = table.game.turn.offer.gives.find(item => item.type === resource.type);
|
||||
valid = offer && (offer.count >= resource.count);
|
||||
if (get.type !== 'bank') {
|
||||
const offer = table.game.turn.offer.gives.find(give => give.type === get.type);
|
||||
trade.valid = offer && (offer.count === get.count);
|
||||
} else {
|
||||
valid = false;
|
||||
/* Doesn't matter what the resource type is so long as there
|
||||
* are enough of the one kind */
|
||||
table.game.turn.offer.gives.forEach(offer => {
|
||||
if (offer.count >= resource.count) {
|
||||
valid = true;
|
||||
}
|
||||
});
|
||||
trade.valid = table.game.turn.offer.gives[0].count === get.count;
|
||||
}
|
||||
});
|
||||
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;
|
||||
@ -238,6 +265,7 @@ const Trade = ({table}) => {
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
const gets = item.gets.map(get =>
|
||||
`${get.count} ${(get.type === 'bank') ? 'of any one resource' : get.type}`)
|
||||
.join(', '),
|
||||
@ -281,6 +309,9 @@ const Trade = ({table}) => {
|
||||
{ players }
|
||||
</div>
|
||||
{ !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 &&
|
||||
<div className='TradeLine'
|
||||
style={{
|
||||
@ -288,7 +319,7 @@ const Trade = ({table}) => {
|
||||
alignItems: 'flex-start'
|
||||
}}>
|
||||
<div style={{display: 'flex' }}>
|
||||
<b>You want to receive {getLine}.</b>
|
||||
<b>You want to receive {getLine}:</b>
|
||||
</div>
|
||||
<div style={{display: 'flex' }}>
|
||||
<ResourceCounter count={gets.brick} onCount={getCount} type='brick'/>
|
||||
@ -298,7 +329,7 @@ const Trade = ({table}) => {
|
||||
<ResourceCounter count={gets.stone} onCount={getCount} type='stone'/>
|
||||
</div>
|
||||
<div style={{display: 'flex' }}>
|
||||
<b>You are willing to give {giveLine}.</b>
|
||||
<b>You are willing to give {giveLine}:</b>
|
||||
</div>
|
||||
<div style={{display: 'flex' }}>
|
||||
{ player.brick > 0 && <ResourceCounter count={gives.brick} onCount={giveCount} type='brick' max={player.brick}/> }
|
||||
@ -309,8 +340,6 @@ const Trade = ({table}) => {
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<Button disabled={getLine === 'nothing' || giveLine === 'nothing'}
|
||||
onClick={offerClicked}>Offer</Button>
|
||||
{ isTurn && <Button onClick={cancelClicked}>cancel</Button> }
|
||||
</Paper>
|
||||
</div>
|
||||
|
@ -1372,17 +1372,19 @@ const isSameOffer = (player, offer) => {
|
||||
return same;
|
||||
};
|
||||
|
||||
const checkOffer = (game, player, offer) => {
|
||||
/* Verifies player can make the offer */
|
||||
const checkPlayerOffer = (game, player, offer) => {
|
||||
let error = undefined;
|
||||
|
||||
console.log({
|
||||
player: getPlayerName(game, player),
|
||||
gets: player.gets,
|
||||
gives: player.gives
|
||||
}, {
|
||||
name: offer.name,
|
||||
console.log({
|
||||
name: getPlayerName(game, player),
|
||||
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 => {
|
||||
@ -1589,7 +1591,7 @@ router.put("/:id/:action/:value?", async (req, res) => {
|
||||
if (value === 'offer') {
|
||||
const offer = req.body;
|
||||
|
||||
error = checkOffer(game, session.player, offer);
|
||||
error = checkPlayerOffer(game, session.player, offer);
|
||||
if (error) {
|
||||
break;
|
||||
}
|
||||
@ -1632,7 +1634,7 @@ router.put("/:id/:action/:value?", async (req, res) => {
|
||||
const offer = req.body;
|
||||
let target;
|
||||
|
||||
error = checkOffer(game, session.player, offer);
|
||||
error = checkPlayerOffer(game, session.player, offer);
|
||||
if (error) {
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user