diff --git a/src/components/farm/Board.jsx b/src/components/farm/Board.jsx index 9aa9985..24553f3 100644 --- a/src/components/farm/Board.jsx +++ b/src/components/farm/Board.jsx @@ -34,7 +34,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faUser, faUsers, faTractor, faWindowRestore, faDollarSign, faTimes, faExchangeAlt, faInfoCircle, faArrowUp, faArrowDown, faAward, - faBan, faArrowCircleLeft } from '@fortawesome/free-solid-svg-icons' + faBan, faArrowCircleLeft, faPlusCircle } from '@fortawesome/free-solid-svg-icons' import { GroupBox, Row, Col, Button } from '../widgets.jsx' import SpaceNode from './SpaceNode.jsx' @@ -48,21 +48,22 @@ import { setSelectedCard, setMessagePanelSpace, setMPDims, movePlayer, import { buy, roll, endTurn, loan, trade, submitTradeAccept, submitTradeDeny, submitTradeCancel, audit, buyUncleBert, skip, endAiTurn, startGame, readyToStart, - leaveGame, kickPlayer, toggleRevealForTrade } from './interface.js' + leaveGame, kickPlayer, toggleRevealForTrade, + addAIPlayer } from './interface.js' function netWorth(player) { return ((player.assets.hay + player.assets.grain) * 2000) + - (player.assets.fruit * 5000) + - (player.assets.cows * 500) + - ((player.assets.harvester + player.assets.tractor) * 10000) + + (player.assets.fruit * 5000) + + (player.assets.cows * 500) + + ((player.assets.harvester + player.assets.tractor) * 10000) + player.displayCash - player.debt; } function assetsValue(player) { return ((player.assets.hay + player.assets.grain) * 2000) + - (player.assets.fruit * 5000) + - (player.assets.cows * 500) + - ((player.assets.harvester + player.assets.tractor) * 10000); + (player.assets.fruit * 5000) + + (player.assets.cows * 500) + + ((player.assets.harvester + player.assets.tractor) * 10000); } class ResourceUnit extends React.Component { @@ -617,227 +618,227 @@ class TradeContainer extends React.Component { return ( {this.state.showCards ? ( - c.id).concat(this.state.receiveCards.map(c => c.id))} - /> + c.id).concat(this.state.receiveCards.map(c => c.id))} + /> ) : ( - <> - - -
-

- {player.name} - {player.cards.length > 0 ? ( - <> - {' - '} - this.viewPlayerCards(e, player)}> - Trade Cards - - - ) : (<>)} -

- {Object.keys(player.ridges).map((ridge, idx) => ( - - {!tradeProposed && (player.ridges[ridge] > 0) && !toTrade[ridge] ? ( - - ) : (<>)} - {' '} - - ))} -
- {this.resources.map((o, i) => { - let amount = o.key === 'money' ? Math.floor(player.cash / 1000) : player.assets[o.key]; - if (o.key === 'cows') { amount = player.assets.cows - playerRidgeCows(player); } - return ( - - {o.icon ? ( - <> - (K) -
- - ) : ''} - {amount + Math.min(0, toTrade[o.key])} - {o.icon ? (
) : ''} - {!tradeProposed && ((amount + Math.min(0, toTrade[o.key])) > 0 || toTrade[o.key] > 0) ? ( - <> - - {o.key === 'money' && (amount + Math.min(0, toTrade[o.key])) >= 10 ? ( - - ) : ''} - - ) : (<>)} -
- ); - })} -
-
- -
- - - {Object.keys(otherPlayer ? otherPlayer.ridges : []).map((ridge, idx) => ( - - {(otherPlayer.ridges[ridge] > 0) && toTrade[ridge] ? ( + <> + + +
+

+ {player.name} + {player.cards.length > 0 ? ( + <> + {' - '} + this.viewPlayerCards(e, player)}> + Trade Cards + + + ) : (<>)} +

+ {Object.keys(player.ridges).map((ridge, idx) => ( + + {!tradeProposed && (player.ridges[ridge] > 0) && !toTrade[ridge] ? ( + + ) : (<>)} + {' '} + + ))} +
+ {this.resources.map((o, i) => { + let amount = o.key === 'money' ? Math.floor(player.cash / 1000) : player.assets[o.key]; + if (o.key === 'cows') { amount = player.assets.cows - playerRidgeCows(player); } + return ( + + {o.icon ? ( + <> + (K) +
+ + ) : ''} + {amount + Math.min(0, toTrade[o.key])} + {o.icon ? (
) : ''} + {!tradeProposed && ((amount + Math.min(0, toTrade[o.key])) > 0 || toTrade[o.key] > 0) ? ( + <> + + {o.key === 'money' && (amount + Math.min(0, toTrade[o.key])) >= 10 ? ( + + ) : ''} + + ) : (<>)} +
+ ); + })} +
+
+ +
+ + + {Object.keys(otherPlayer ? otherPlayer.ridges : []).map((ridge, idx) => ( + + {(otherPlayer.ridges[ridge] > 0) && toTrade[ridge] ? ( + + ) : (<>)} + {' '} + + ))} + {this.state.receiveCards.map((card, idx) => ( - ) : (<>)} - {' '} -
- ))} - {this.state.receiveCards.map((card, idx) => ( - - ))} - -
- - -
- {this.resources.map((o, i) => ( - - {Math.abs(toTrade[o.key])} - - ))} -
- -
- - - {Object.keys(player.ridges).map((ridge, idx) => ( - - {(player.ridges[ridge] > 0) && toTrade[ridge] ? ( + ))} + + + + +
+ {this.resources.map((o, i) => ( + + {Math.abs(toTrade[o.key])} + + ))} +
+ +
+ + + {Object.keys(player.ridges).map((ridge, idx) => ( + + {(player.ridges[ridge] > 0) && toTrade[ridge] ? ( + + ) : (<>)} + {' '} + + ))} + {this.state.sendCards.map((card, idx) => ( - ) : (<>)} - {' '} - - ))} - {this.state.sendCards.map((card, idx) => ( - - ))} - - - - -
- {otherPlayer ? ( -
- {this.resources.map((o, i) => { - let amount = o.key === 'money' ? 99 : otherPlayer.assets[o.key]; - if (o.key === 'cows') { amount = otherPlayer.assets.cows - playerRidgeCows(otherPlayer); } - return ( - - {o.icon ? ( - <> - (K) -
- - ) : ''} - {amount - Math.max(0, toTrade[o.key])} - {o.icon ? (
) : ''} - {!tradeProposed && ((amount - Math.max(0, toTrade[o.key])) > 0 || toTrade[o.key] < 0) ? ( - <> - - {o.key === 'money' && (amount - Math.min(0, toTrade[o.key])) >= 10 ? ( - + ))} + + + + +
+ {otherPlayer ? ( +
+ {this.resources.map((o, i) => { + let amount = o.key === 'money' ? 99 : otherPlayer.assets[o.key]; + if (o.key === 'cows') { amount = otherPlayer.assets.cows - playerRidgeCows(otherPlayer); } + return ( + + {o.icon ? ( + <> + (K) +
+ ) : ''} - - ) : (<>)} -
- ); - })} + {amount - Math.max(0, toTrade[o.key])} + {o.icon ? (
) : ''} + {!tradeProposed && ((amount - Math.max(0, toTrade[o.key])) > 0 || toTrade[o.key] < 0) ? ( + <> + + {o.key === 'money' && (amount - Math.min(0, toTrade[o.key])) >= 10 ? ( + + ) : ''} + + ) : (<>)} + + ); + })} +
+ ) : (<>)} + {Object.keys(otherPlayer ? otherPlayer.ridges : []).map((ridge, idx) => ( + + {!tradeProposed && ((otherPlayer.ridges[ridge] > 0) && !toTrade[ridge]) ? ( + + ) : (<>)} + {' '} + + ))} + + {otherPlayer && otherPlayer.revealedCards.length > 0 ? ( + this.viewPlayerCards(e, otherPlayer)}> + Trade Cards + + ) : (<>)}
- ) : (<>)} - {Object.keys(otherPlayer ? otherPlayer.ridges : []).map((ridge, idx) => ( - - {!tradeProposed && ((otherPlayer.ridges[ridge] > 0) && !toTrade[ridge]) ? ( - - ) : (<>)} - {' '} - - ))} - - {otherPlayer && otherPlayer.revealedCards.length > 0 ? ( - this.viewPlayerCards(e, otherPlayer)}> - Trade Cards - - ) : (<>)} -
- - - - - {player.trade.error ? ( -

ERROR: {player.trade.error}

- ) : (<>)} - {tradeProposed && player.trade.originator === player.name ? ( - - ) : (<>)} - {tradeProposed && player.trade.originator !== player.name ? ( - <> - {' '} - - - ) : (<>)} - {!tradeProposed ? ( - - ) : (<>)} - -
- )} + + + + + {player.trade.error ? ( +

ERROR: {player.trade.error}

+ ) : (<>)} + {tradeProposed && player.trade.originator === player.name ? ( + + ) : (<>)} + {tradeProposed && player.trade.originator !== player.name ? ( + <> + {' '} + + + ) : (<>)} + {!tradeProposed ? ( + + ) : (<>)} + +
+ )} ); } @@ -1340,7 +1341,7 @@ class Harvest extends React.Component { Get ready to harvest {this.props.acres} {this.props.crop === 'cows' ? ' head of cow' : ' acres'}!
- {isCurrentPlayer ? ( + {isCurrentPlayer || this.props.currentPlayer.ai ? ( @@ -1356,7 +1357,7 @@ class Harvest extends React.Component { view = ( this.nextView('income')} - skip={this.props.player.name === this.props.game.currentPlayer} + skip={this.props.player.name === this.props.game.currentPlayer || this.props.currentPlayer.ai} autoSkip={this.props.autoSkip === 'die'} showScreenDelay={2000} />); break; @@ -1372,7 +1373,7 @@ class Harvest extends React.Component { - {isCurrentPlayer ? ( + {isCurrentPlayer || this.props.currentPlayer.ai ? (
@@ -1389,7 +1390,7 @@ class Harvest extends React.Component { dangerouslySetInnerHTML={{__html: this.props.contents}} />
- {isCurrentPlayer ? ( + {isCurrentPlayer || this.props.currentPlayer.ai ? (
@@ -1424,7 +1425,7 @@ class Harvest extends React.Component { - {isCurrentPlayer ? + {isCurrentPlayer || this.props.currentPlayer.ai ? (
@@ -1488,7 +1489,7 @@ class Action extends React.Component { bertSubmit = (e) => { e.preventDefault(); - if (this.state.bertChoice === 'accept') { + if (this.state.bertChoice === 'accept' || this.props.currentPlayer.ai) { buyUncleBert(); this.props.showNextAction(); } else if (this.state.bertChoice === 'deny') { @@ -1550,6 +1551,11 @@ class Action extends React.Component { ); + const aiButton = ( +
+ +
+ ); view = (
@@ -1567,6 +1573,7 @@ class Action extends React.Component {
{(this.props.player.name === this.props.game.currentPlayer) ? ffButtons : ()} + {currentPlayer.ai ? aiButton : (<>)}
@@ -1937,6 +1944,11 @@ class StartGame extends React.Component { ): (<>)} ))} +
  • + + AI + +
  • Game Settings