Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
AICounterTradeRuntime.cpp
Go to the documentation of this file.
2
3#include "Messaging.hpp"
4
6{
10 const TradeProposalList& currentTrade,
12 const decision::CounterProposalPreflightConfig& preflightConfig,
13 const decision::CounterProposalBalanceConfig& balanceConfig,
16 std::span<const FutureImmunityRecord> immunities) noexcept
17 {
18 CounterTradeRunResult result{};
19 if (player >= state.numberOfPlayers ||
20 inputs.proposedPlayer >= state.numberOfPlayers)
21 return result;
22
23 auto effectiveInputs = inputs;
24 effectiveInputs.playerSendingTrade = effectiveInputs.playerSendingTrade ||
25 runtime.sending.state != SendingTradeState::Nothing;
26 const auto preflight = decision::counterProposalPreflight(
27 state, player, currentTrade, effectiveInputs,
28 preflightConfig, session, immunities);
29 result.preflightStatus = preflight.status;
30
32 {
33 const bool queued = messaging::sendAction(
35 player,
37 1,
38 inputs.proposedPlayer);
39 result.status = queued
42 return result;
43 }
44 if (preflight.status != decision::CounterProposalStatus::Ready)
45 {
47 return result;
48 }
49
50 auto proposal = currentTrade;
51 const auto balance = decision::counterProposalBalance(
52 state, player, preflight, proposal,
53 balanceConfig, immunities);
54 result.balanceStatus = balance.status;
56 {
58 return result;
59 }
60
61 runtime.pendingProposal = proposal;
62 runtime.player = player;
63 runtime.proposedPlayer = inputs.proposedPlayer;
64 runtime.hasPendingProposal = true;
65 if (!inputs.tradeAccept)
66 runtime.sending.sendTradeOffer = true;
67
69 state, player, runtime.pendingProposal,
70 inputs.tradeAccept, inputs.proposedPlayer, runtime.sending))
71 {
73 return result;
74 }
75
76 ++session.timesCounteredTrade;
78 return result;
79 }
80
83 CounterTradeRuntimeState& runtime) noexcept
84 {
85 if (!runtime.hasPendingProposal ||
86 runtime.sending.state != SendingTradeState::TradeItems ||
87 runtime.player >= state.numberOfPlayers)
88 return false;
89
90 return sendProposedTrade(
91 state,
92 runtime.player,
93 runtime.pendingProposal,
94 false,
95 runtime.proposedPlayer,
96 runtime.sending);
97 }
98
101 actions::Type action,
102 bool success) noexcept
103 {
104 processTradeSendActionCompleted(runtime.sending, action, success);
106 runtime.hasPendingProposal = false;
107 }
108}
fonts::Runtime & runtime
unsigned state
CounterProposalPreflightResult counterProposalPreflight(const rules::GameState &state, rules::PlayerNumber player, const ai::trade::TradeProposalList &currentTrade, 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 &currentTrade, 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
Definition RuleTypes.hpp:15
std::uint8_t PlayerNumber
Definition RuleTypes.hpp:12