Show IFS card buying errors and allow buying with emergency loan.
This commit is contained in:
@@ -40,7 +40,7 @@ import Tractor from '../tractor/Tractor.jsx'
|
||||
import { GAME_STATES, ALERTS } from '../../constants.js'
|
||||
import { itemCard, itemCardShort, fateCard, ridgeNames } from 'game.js'
|
||||
import { setSelectedCard, setMessagePanelSpace, setMPDims, movePlayer,
|
||||
nextUIAction, alert, alertHandled } from './actions.js'
|
||||
nextUIAction, alert, alertHandled, setCardError } from './actions.js'
|
||||
import { buy, roll, endTurn, loan, trade, submitTradeAccept,
|
||||
submitTradeDeny, submitTradeCancel, audit,
|
||||
buyUncleBert, skip } from './interface.js'
|
||||
@@ -1673,20 +1673,23 @@ class BoardApp extends React.Component {
|
||||
</div>
|
||||
<div className={this.tabClass(SCREENS.cards)}>
|
||||
<Row>
|
||||
<div className='cell medium-auto'>
|
||||
<CardList ui={this.props.ui} cardId={this.state.card.id}
|
||||
setCard={this.setCard} />
|
||||
</div>
|
||||
<div className='cell medium-auto'>
|
||||
<Card ui={this.props.ui}
|
||||
playerCash={this.props.player.cash}
|
||||
playerDebt={this.props.player.debt}
|
||||
card={this.state.card}
|
||||
cost={this.state.card.total / 1000}
|
||||
min={(this.state.card.total * this.props.game.settings.downPayment) / 1000}
|
||||
max={Math.floor(Math.min(this.props.player.cash / 1000, this.state.card.total / 1000))}
|
||||
cash={(this.state.card.total * this.props.game.settings.downPayment) / 1000} />
|
||||
</div>
|
||||
<Col width="12">
|
||||
<div>
|
||||
<CardList ui={this.props.ui} cardId={this.state.card.id}
|
||||
setCard={this.setCard} />
|
||||
</div>
|
||||
<div>
|
||||
<Card ui={this.props.ui}
|
||||
setCardError={this.props.setCardError}
|
||||
playerCash={this.props.player.cash}
|
||||
playerDebt={this.props.player.debt}
|
||||
card={this.state.card}
|
||||
cost={this.state.card.total / 1000}
|
||||
min={(this.state.card.total * this.props.game.settings.downPayment) / 1000}
|
||||
max={Math.floor(Math.min(this.props.player.cash / 1000, this.state.card.total / 1000))}
|
||||
cash={(this.state.card.total * this.props.game.settings.downPayment) / 1000} />
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
</div>
|
||||
<div className={this.tabClass(SCREENS.loans)}>
|
||||
@@ -1730,7 +1733,7 @@ class BoardApp extends React.Component {
|
||||
|
||||
export default connect(
|
||||
state => state.farm,
|
||||
{ setMessagePanelSpace, setMPDims, nextUIAction, movePlayer, alert, alertHandled }
|
||||
{ setMessagePanelSpace, setMPDims, nextUIAction, movePlayer, alert, alertHandled, setCardError }
|
||||
)(BoardApp)
|
||||
|
||||
class Card extends React.Component {
|
||||
@@ -1755,6 +1758,7 @@ class Card extends React.Component {
|
||||
parseInt(target.value)), this.props.max);
|
||||
if (isNaN(value)) { value = this.props.min; }
|
||||
this.setState({ cash: value });
|
||||
this.props.setCardError(false);
|
||||
}
|
||||
|
||||
handleSubmit = e => {
|
||||
@@ -1799,6 +1803,13 @@ class Card extends React.Component {
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
{this.props.ui.cardError ? (
|
||||
<Row>
|
||||
<Col width="12">
|
||||
<span className="error">{this.props.ui.cardError}</span>
|
||||
</Col>
|
||||
</Row>
|
||||
) : (<></>)}
|
||||
|
||||
</form>
|
||||
</div>); break;
|
||||
@@ -1831,9 +1842,9 @@ class CardListComp extends React.Component {
|
||||
cards = ui.cards,
|
||||
cardOps = cards.map((c, i) =>
|
||||
(<li key={i} className={c.id == this.props.cardId ? 'card-select-selected' : ''}
|
||||
onClick={() => this.props.setCard(c)}>
|
||||
{c.summary}
|
||||
</li>));
|
||||
onClick={() => { this.props.setCard(c); this.props.setCardError(false); }}>
|
||||
{c.summary}
|
||||
</li>));
|
||||
|
||||
return (
|
||||
<GroupBox title='Cards'>
|
||||
@@ -1847,5 +1858,5 @@ class CardListComp extends React.Component {
|
||||
|
||||
const CardList = connect(
|
||||
null,
|
||||
{ setSelectedCard }
|
||||
{ setSelectedCard, setCardError }
|
||||
)(CardListComp)
|
||||
|
||||
@@ -21,6 +21,7 @@ export const UPDATE_PLAYER = 'update-player';
|
||||
export const GAME_STATE = 'game-state';
|
||||
export const SET_SELECTED_CARD = 'set-selected-card';
|
||||
export const SET_CARDS = 'set-cards';
|
||||
export const SET_CARD_ERROR = 'set-card-error';
|
||||
export const SPACE_PUSH_PLAYER = 'space-push-player';
|
||||
export const SPACE_CLEAR_PLAYERS = 'space-clear-players';
|
||||
export const SET_OLD_MESSAGES = 'set-old-messages';
|
||||
|
||||
@@ -20,13 +20,13 @@ import { UPDATE_GAME, UPDATE_PLAYER, GAME_STATE, SET_SELECTED_CARD, SET_CARDS,
|
||||
SPACE_PUSH_PLAYER, SPACE_CLEAR_PLAYERS, SET_OLD_MESSAGES, MESSAGE_PANEL_SPACE,
|
||||
MP_MOUSE, SET_MP_DIMS, MARK_ACTION_CHANGE_HANDLED, SET_NEXT_ACTION,
|
||||
MOVE_PLAYER, NEXT_UI_ACTION, NEXT_UI_ACTION_SILENT, ALERT, ALERT_HANDLED,
|
||||
AUTO_SKIP, MESSAGE, SET_HARVEST_TABLE } from './actionTypes.js'
|
||||
AUTO_SKIP, MESSAGE, SET_HARVEST_TABLE, SET_CARD_ERROR } from './actionTypes.js'
|
||||
|
||||
export { updateGame, updatePlayer, gameState, setSelectedCard, setCards,
|
||||
spacePushPlayer, spaceClearPlayers, setOldMessages, setMessagePanelSpace,
|
||||
mpMouse, setMPDims, movePlayer, setNextAction, nextUIAction,
|
||||
markActionChangeHandled, nextUIActionSilent, alert, alertHandled,
|
||||
autoSkip, message, setHarvestTable }
|
||||
autoSkip, message, setHarvestTable, setCardError }
|
||||
|
||||
function updateGame(update) {
|
||||
return { type: UPDATE_GAME,
|
||||
@@ -54,6 +54,10 @@ function setCards(cards) {
|
||||
cards };
|
||||
}
|
||||
|
||||
function setCardError(error) {
|
||||
return { type: SET_CARD_ERROR, error };
|
||||
}
|
||||
|
||||
function spacePushPlayer(id, player) {
|
||||
return { type: SPACE_PUSH_PLAYER,
|
||||
id,
|
||||
|
||||
@@ -24,7 +24,7 @@ import * as websocket from '../../websocket.js'
|
||||
import { updateGame, updatePlayer, gameState, setSelectedCard, setCards,
|
||||
movePlayer, setOldMessages, markActionChangeHandled,
|
||||
mpMouse, rolled, setNextAction, nextUIAction, nextUIActionSilent, alert,
|
||||
autoSkip, message, alertHandled, setHarvestTable } from './actions.js'
|
||||
autoSkip, message, alertHandled, setHarvestTable, setCardError } from './actions.js'
|
||||
import { itemCard, fateCard } from 'game.js'
|
||||
|
||||
export { initialize, buy, roll, endTurn, loan, trade, submitTradeAccept,
|
||||
@@ -63,6 +63,9 @@ function handleMessage(evt) {
|
||||
store.dispatch(setNextAction(false, false));
|
||||
store.dispatch(nextUIAction());
|
||||
}
|
||||
if (data.event === 'buy' && data.error) {
|
||||
store.dispatch(setCardError(data.error));
|
||||
}
|
||||
store.dispatch(updatePlayer(data.player));
|
||||
if (data.event === 'init') {
|
||||
store.dispatch(movePlayer(data.player.space, 0, data.player.color));
|
||||
|
||||
@@ -21,7 +21,7 @@ import { UPDATE_GAME, UPDATE_PLAYER, GAME_STATE, SET_SELECTED_CARD, SET_CARDS,
|
||||
SET_OLD_MESSAGES, MESSAGE_PANEL_SPACE, MP_MOUSE,
|
||||
SET_MP_DIMS, MOVE_PLAYER, SET_NEXT_ACTION, NEXT_UI_ACTION,
|
||||
MARK_ACTION_CHANGE_HANDLED, NEXT_UI_ACTION_SILENT, ALERT, ALERT_HANDLED,
|
||||
AUTO_SKIP, MESSAGE, SET_HARVEST_TABLE } from './actionTypes.js'
|
||||
AUTO_SKIP, MESSAGE, SET_HARVEST_TABLE, SET_CARD_ERROR } from './actionTypes.js'
|
||||
import { GAME_STATES } from '../../constants.js'
|
||||
import { spaceContent, corners } from 'game.js'
|
||||
|
||||
@@ -107,6 +107,7 @@ const initialState = {
|
||||
},
|
||||
ui: { card: { type: 'no-card', contents: '', total: 0 },
|
||||
cards: [],
|
||||
cardError: false,
|
||||
action: false,
|
||||
actionValue: null,
|
||||
nextAction: false,
|
||||
@@ -140,6 +141,8 @@ export default function(state = initialState, action) {
|
||||
return { ...state, ui: { ...state.ui, card: action.card }};
|
||||
case SET_CARDS:
|
||||
return { ...state, ui: { ...state.ui, cards: action.cards }};
|
||||
case SET_CARD_ERROR:
|
||||
return { ...state, ui: { ...state.ui, cardError: action.error }};
|
||||
case MOVE_PLAYER:
|
||||
return { ...state, spaces: state.spaces
|
||||
.map((item, index) => {
|
||||
|
||||
Reference in New Issue
Block a user