Initial frontend AI support.
This commit is contained in:
@@ -45,7 +45,7 @@ import { setSelectedCard, setMessagePanelSpace, setMPDims, movePlayer,
|
|||||||
setMovingSkip } from './actions.js'
|
setMovingSkip } from './actions.js'
|
||||||
import { buy, roll, endTurn, loan, trade, submitTradeAccept,
|
import { buy, roll, endTurn, loan, trade, submitTradeAccept,
|
||||||
submitTradeDeny, submitTradeCancel, audit,
|
submitTradeDeny, submitTradeCancel, audit,
|
||||||
buyUncleBert, skip } from './interface.js'
|
buyUncleBert, skip, endAiTurn } from './interface.js'
|
||||||
|
|
||||||
function netWorth(player) {
|
function netWorth(player) {
|
||||||
return ((player.assets.hay + player.assets.grain) * 2000) +
|
return ((player.assets.hay + player.assets.grain) * 2000) +
|
||||||
@@ -1447,9 +1447,11 @@ class Moving extends React.Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
let buttons;
|
let buttons;
|
||||||
if (this.props.player.name !== this.props.game.currentPlayer) {
|
if ((this.props.player.name !== this.props.game.currentPlayer &&
|
||||||
|
!this.props.currentPlayer.ai)) {
|
||||||
buttons = (<Fragment />);
|
buttons = (<Fragment />);
|
||||||
} else if (this.props.ui.playerSpaces[this.props.player.color] === this.props.ui.actionValue.to) {
|
} else if (this.props.ui.playerSpaces[(this.props.currentPlayer.ai && this.props.currentPlayer.color) || this.props.player.color]
|
||||||
|
=== this.props.ui.actionValue.to) {
|
||||||
buttons = (<Button onClick={() => this.props.showNextAction()}>Continue</Button>);
|
buttons = (<Button onClick={() => this.props.showNextAction()}>Continue</Button>);
|
||||||
} else {
|
} else {
|
||||||
buttons = (<Button onClick={() => this.skip()}>Skip</Button>);
|
buttons = (<Button onClick={() => this.skip()}>Skip</Button>);
|
||||||
@@ -1479,7 +1481,8 @@ class Moving extends React.Component {
|
|||||||
class Action extends React.Component {
|
class Action extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
let view, buttons;
|
let view, buttons;
|
||||||
const currentPlayer = this.props.player.name === this.props.game.currentPlayer ?
|
const currentPlayer = (this.props.player.name === this.props.game.currentPlayer ||
|
||||||
|
this.props.game.currentPlayer === '') ?
|
||||||
this.props.player : this.props.game.otherPlayers
|
this.props.player : this.props.game.otherPlayers
|
||||||
.find(p => p.player.name === this.props.game.currentPlayer).player;
|
.find(p => p.player.name === this.props.game.currentPlayer).player;
|
||||||
switch (this.props.ui.action) {
|
switch (this.props.ui.action) {
|
||||||
@@ -1587,6 +1590,7 @@ class Action extends React.Component {
|
|||||||
case 'move':
|
case 'move':
|
||||||
view = (<Moving showNextAction={() => this.props.showNextAction()}
|
view = (<Moving showNextAction={() => this.props.showNextAction()}
|
||||||
key={this.props.game.currentPlayer + '|' + this.props.ui.actionValue.from + '|' + this.props.ui.actionValue.to}
|
key={this.props.game.currentPlayer + '|' + this.props.ui.actionValue.from + '|' + this.props.ui.actionValue.to}
|
||||||
|
currentPlayer={currentPlayer}
|
||||||
player={this.props.player}
|
player={this.props.player}
|
||||||
game={this.props.game}
|
game={this.props.game}
|
||||||
spaces={this.props.spaces}
|
spaces={this.props.spaces}
|
||||||
@@ -1601,6 +1605,7 @@ class Action extends React.Component {
|
|||||||
case 'resolve-move':
|
case 'resolve-move':
|
||||||
view = (<Moving showNextAction={() => this.props.showNextAction()}
|
view = (<Moving showNextAction={() => this.props.showNextAction()}
|
||||||
key={this.props.game.currentPlayer + '|' + this.props.ui.actionValue.from + '|' + this.props.ui.actionValue.to}
|
key={this.props.game.currentPlayer + '|' + this.props.ui.actionValue.from + '|' + this.props.ui.actionValue.to}
|
||||||
|
currentPlayer={currentPlayer}
|
||||||
player={this.props.player}
|
player={this.props.player}
|
||||||
game={this.props.game}
|
game={this.props.game}
|
||||||
spaces={this.props.spaces}
|
spaces={this.props.spaces}
|
||||||
@@ -1615,6 +1620,7 @@ class Action extends React.Component {
|
|||||||
case 'goto':
|
case 'goto':
|
||||||
view = (<Moving showNextAction={() => this.props.showNextAction()}
|
view = (<Moving showNextAction={() => this.props.showNextAction()}
|
||||||
timerId={this.props.timerId}
|
timerId={this.props.timerId}
|
||||||
|
currentPlayer={currentPlayer}
|
||||||
setTimerId={this.props.setTimerId}
|
setTimerId={this.props.setTimerId}
|
||||||
player={this.props.player}
|
player={this.props.player}
|
||||||
game={this.props.game}
|
game={this.props.game}
|
||||||
@@ -1635,11 +1641,13 @@ class Action extends React.Component {
|
|||||||
this.props.ui.actionValue.from - 49 : this.props.ui.actionValue.from);
|
this.props.ui.actionValue.from - 49 : this.props.ui.actionValue.from);
|
||||||
view = (<Rolling num={roll}
|
view = (<Rolling num={roll}
|
||||||
name={this.props.game.currentPlayer}
|
name={this.props.game.currentPlayer}
|
||||||
showScreen={this.props.player.name === this.props.game.currentPlayer
|
showScreen={(this.props.player.name === this.props.game.currentPlayer ||
|
||||||
|
currentPlayer.ai)
|
||||||
? () => this.props.showNextAction()
|
? () => this.props.showNextAction()
|
||||||
: false}
|
: false}
|
||||||
autoSkip={this.props.ui.autoSkip}
|
autoSkip={this.props.ui.autoSkip}
|
||||||
skip={this.props.player.name === this.props.game.currentPlayer}
|
skip={(this.props.player.name === this.props.game.currentPlayer ||
|
||||||
|
currentPlayer.ai)}
|
||||||
showScreenDelay={2000} />);
|
showScreenDelay={2000} />);
|
||||||
buttons = (<Fragment />);
|
buttons = (<Fragment />);
|
||||||
break;
|
break;
|
||||||
@@ -1650,6 +1658,12 @@ class Action extends React.Component {
|
|||||||
screen={this.props.screen}
|
screen={this.props.screen}
|
||||||
showScreen={this.props.showScreen}
|
showScreen={this.props.showScreen}
|
||||||
game={this.props.game} />);
|
game={this.props.game} />);
|
||||||
|
} else if (currentPlayer.ai) {
|
||||||
|
view = (
|
||||||
|
<Button onClick={endAiTurn}>
|
||||||
|
Next Player's Turn
|
||||||
|
</Button>
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
view = (<Fragment>Waiting for {this.props.game.currentPlayer}</Fragment>);
|
view = (<Fragment>Waiting for {this.props.game.currentPlayer}</Fragment>);
|
||||||
}
|
}
|
||||||
@@ -1663,7 +1677,7 @@ class Action extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div className={'center'}>
|
<div className={'center'}>
|
||||||
{this.props.otherPlayersTurn ? (<Fragment />) : buttons}
|
{(this.props.otherPlayersTurn && !currentPlayer.ai ) ? (<Fragment />) : buttons}
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import { itemCard, fateCard } from 'game.js'
|
|||||||
|
|
||||||
export { initialize, buy, roll, endTurn, loan, trade, submitTradeAccept,
|
export { initialize, buy, roll, endTurn, loan, trade, submitTradeAccept,
|
||||||
submitTradeDeny, submitTradeCancel, audit, handleMessage,
|
submitTradeDeny, submitTradeCancel, audit, handleMessage,
|
||||||
nextAction, buyUncleBert, actionsFinished, skip }
|
nextAction, buyUncleBert, actionsFinished, skip, endAiTurn }
|
||||||
|
|
||||||
let store;
|
let store;
|
||||||
let movingTimer = 0;
|
let movingTimer = 0;
|
||||||
@@ -84,9 +84,14 @@ function handleMessage(evt) {
|
|||||||
store.dispatch(updateGame(data.game));
|
store.dispatch(updateGame(data.game));
|
||||||
store.dispatch(setOldMessages(oldMessages));
|
store.dispatch(setOldMessages(oldMessages));
|
||||||
store.dispatch(setCards(data.player.cards));
|
store.dispatch(setCards(data.player.cards));
|
||||||
|
const currentPlayer = (data.player.name === data.game.currentPlayer
|
||||||
|
|| data.game.currentPlayer === '') ?
|
||||||
|
data.player : data.game.otherPlayers
|
||||||
|
.find(p => p.player.name === data.game.currentPlayer).player;
|
||||||
if (data.event === 'action') {
|
if (data.event === 'action') {
|
||||||
if (data.player.name !== data.game.currentPlayer &&
|
if (data.player.name !== data.game.currentPlayer &&
|
||||||
data.action !== 'roll') {
|
data.action !== 'roll' &&
|
||||||
|
!currentPlayer.ai) {
|
||||||
store.dispatch(nextUIAction());
|
store.dispatch(nextUIAction());
|
||||||
}
|
}
|
||||||
store.dispatch(setNextAction(data.action, data.value));
|
store.dispatch(setNextAction(data.action, data.value));
|
||||||
@@ -136,6 +141,10 @@ function endTurn() {
|
|||||||
sendCommand({ type: 'turn-ended' });
|
sendCommand({ type: 'turn-ended' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function endAiTurn() {
|
||||||
|
sendCommand({ type: 'end-ai-turn' });
|
||||||
|
}
|
||||||
|
|
||||||
function loan(amount) {
|
function loan(amount) {
|
||||||
sendCommand({ type: 'loan', amount: amount });
|
sendCommand({ type: 'loan', amount: amount });
|
||||||
}
|
}
|
||||||
@@ -192,10 +201,16 @@ function initialize(st, sc) {
|
|||||||
rollTimer = false,
|
rollTimer = false,
|
||||||
movingAction = { from: 99, to: 99 },
|
movingAction = { from: 99, to: 99 },
|
||||||
handledResolveMove = true;
|
handledResolveMove = true;
|
||||||
|
|
||||||
const unsubscribe = store.subscribe(
|
const unsubscribe = store.subscribe(
|
||||||
() => {
|
() => {
|
||||||
const state = store.getState();
|
const state = store.getState();
|
||||||
if (state.farm.player.name === state.farm.game.currentPlayer
|
const currentPlayer = (state.farm.player.name === state.farm.game.currentPlayer
|
||||||
|
|| state.farm.game.currentPlayer === '') ?
|
||||||
|
state.farm.player : state.farm.game.otherPlayers
|
||||||
|
.find(p => p.player.name === state.farm.game.currentPlayer).player;
|
||||||
|
if ((state.farm.player.name === state.farm.game.currentPlayer ||
|
||||||
|
(currentPlayer.ai)) // TODO add test for first player, or something. only one player should be doing this
|
||||||
&& !state.farm.ui.actionChangeHandled) {
|
&& !state.farm.ui.actionChangeHandled) {
|
||||||
store.dispatch(markActionChangeHandled());
|
store.dispatch(markActionChangeHandled());
|
||||||
nextAction();
|
nextAction();
|
||||||
|
|||||||
@@ -95,7 +95,8 @@ const initialState = {
|
|||||||
space: 0,
|
space: 0,
|
||||||
hayDoubled: false,
|
hayDoubled: false,
|
||||||
cornDoubled: false,
|
cornDoubled: false,
|
||||||
trade: {}
|
trade: {},
|
||||||
|
ai: false
|
||||||
},
|
},
|
||||||
game: { calledAudit: false,
|
game: { calledAudit: false,
|
||||||
currentPlayer: '',
|
currentPlayer: '',
|
||||||
|
|||||||
Reference in New Issue
Block a user