16 std::span<const FutureImmunityRecord> immunities)
noexcept
19 if (player >=
state.numberOfPlayers ||
20 inputs.proposedPlayer >=
state.numberOfPlayers)
23 auto effectiveInputs = inputs;
24 effectiveInputs.playerSendingTrade = effectiveInputs.playerSendingTrade ||
27 state, player, currentTrade, effectiveInputs,
28 preflightConfig, session, immunities);
29 result.preflightStatus = preflight.status;
38 inputs.proposedPlayer);
39 result.status = queued
50 auto proposal = currentTrade;
52 state, player, preflight, proposal,
53 balanceConfig, immunities);
54 result.balanceStatus = balance.status;
61 runtime.pendingProposal = proposal;
63 runtime.proposedPlayer = inputs.proposedPlayer;
64 runtime.hasPendingProposal =
true;
65 if (!inputs.tradeAccept)
66 runtime.sending.sendTradeOffer =
true;
70 inputs.tradeAccept, inputs.proposedPlayer,
runtime.sending))
76 ++session.timesCounteredTrade;
85 if (!
runtime.hasPendingProposal ||
102 bool success)
noexcept
106 runtime.hasPendingProposal =
false;
CounterProposalPreflightResult counterProposalPreflight(const rules::GameState &state, rules::PlayerNumber player, const ai::trade::TradeProposalList ¤tTrade, const CounterProposalPreflightInputs &inputs, const CounterProposalPreflightConfig &config, CounterProposalSession &session, std::span< const ai::trade::FutureImmunityRecord > immunities) noexcept
CounterProposalBalanceResult counterProposalBalance(const rules::GameState &state, rules::PlayerNumber player, const CounterProposalPreflightResult &preflight, ai::trade::TradeProposalList &proposals, const CounterProposalBalanceConfig &config, std::span< const ai::trade::FutureImmunityRecord > immunities) noexcept
bool sendProposedTrade(const rules::GameState &state, rules::PlayerNumber player, const TradeProposalList &proposals, bool tradeAccept, rules::PlayerNumber proposedPlayer, TradeSendRuntimeState &runtime) noexcept
void processCounterProposalActionCompleted(CounterTradeRuntimeState &runtime, actions::Type action, bool success) noexcept
bool continueCounterProposalTradeSend(const rules::GameState &state, CounterTradeRuntimeState &runtime) noexcept
void processTradeSendActionCompleted(TradeSendRuntimeState &runtime, actions::Type action, bool success) noexcept
std::array< TradeProposalRecord, rules::MaxPlayers > TradeProposalList
CounterTradeRunResult counterProposeTrade(const rules::GameState &state, rules::PlayerNumber player, const TradeProposalList ¤tTrade, const decision::CounterProposalPreflightInputs &inputs, const decision::CounterProposalPreflightConfig &preflightConfig, const decision::CounterProposalBalanceConfig &balanceConfig, decision::CounterProposalSession &session, CounterTradeRuntimeState &runtime, std::span< const FutureImmunityRecord > immunities) noexcept
bool sendAction(const actions::Message &message)
constexpr PlayerNumber BankPlayer
std::uint8_t PlayerNumber