15#include <SDL3/SDL_scancode.h>
63 options.active =
true;
131 const int x =
static_cast<int>(message.numberA);
132 const int y =
static_cast<int>(message.numberB);
200 bool playerSelectVisible()
226 playerSelectVisible() ||
245 const PlayerDisplay&
slot =
247 static_cast<std::size_t
>(
272 if (player >= 0)
return player;
279 std::optional<layout::ActionButtonSlot>
actionHit(
323 std::int64_t numberA = 0,
324 std::int64_t numberB = 0,
325 std::int64_t numberC = 0,
326 std::int64_t numberD = 0)
346 const uimsg::Message& message)
noexcept
381 player <
uiState.numberOfPlayers;
402 player <
uiState.numberOfPlayers;
500 if (
slot == Slot::Main)
505 if (
slot == Slot::Main)
510 if (
slot == Slot::Main)
515 if (
slot == Slot::Main)
520 if (
slot == Slot::Main)
522 if (
slot == Slot::General3)
527 if (
slot == Slot::Main)
529 if (
slot == Slot::General3)
537 if (
slot == Slot::Main)
539 if (
slot == Slot::General2)
541 if (
slot == Slot::General3)
546 if (
slot == Slot::Main)
548 if (
slot == Slot::General2)
550 if (
slot == Slot::General3)
555 if (
slot == Slot::Main)
561 if (
slot == Slot::Main)
609 if (
slot == Slot::Main)
618 if (
slot == Slot::Main)
632 if (
slot == Slot::General2)
645 if (
slot == Slot::Main)
659 if (
slot == Slot::Main)
668 if (
slot == Slot::Main)
675 if (
slot == Slot::General1)
678 if (
slot == Slot::General2)
681 if (
slot == Slot::General3 ||
slot == Slot::General4)
709 static_cast<std::size_t
>(square)].owner ==
globalState.actionPlayer)
711 globalState.selectedDeed =
static_cast<std::uint8_t
>(square);
774 std::uint64_t numberOfTicks)
816 const int numberOfPlayers =
842 static_cast<std::size_t
>(
853 player >= numberOfPlayers)
899 .showOnlyLocalPlayersOnIBar &&
908 .showOnlyLocalAIPlayersOnIBar &&
939 static_cast<std::size_t
>(
941 .playerCurrentMouseOver
953 .playerCurrentMouseOver =
972 if (playerSelectVisible())
979 static_cast<int>(message.
numberA),
980 static_cast<int>(message.
numberB));
991 static_cast<int>(message.
numberA),
992 static_cast<int>(message.
numberB));
1013 static_cast<int>(message.
numberA),
1014 static_cast<int>(message.
numberB));
1019 static_cast<int>(message.
numberA),
1020 static_cast<int>(message.
numberB));
1022 ?
static_cast<int>(*action)
1028 static_cast<int>(message.
numberA),
1029 static_cast<int>(message.
numberB),
1031 globalState.propertyCurrentMouseOver =
property ? *property : -1;
1052 static_cast<int>(*action);
1077 std::uint64_t tick)
noexcept
1085 globalState.decompositionHousesToSell = -message.numberB;
1095 globalState.cashAnimationAmount = message.numberC;
1105 const int square =
static_cast<int>(message.numberB);
1110 static_cast<std::uint8_t
>(square);
1117 const auto deck = message.numberB;
1118 const auto card = message.numberC;
1122 globalState.desiredCardIndex =
static_cast<std::uint8_t
>(
1128 globalState.desiredCardIndex =
static_cast<std::uint8_t
>(
1141 message.numberB == 0 ||
1142 message.numberA < 0 ||
1143 message.numberA >
static_cast<std::int64_t
>(
1149 const auto action =
static_cast<actions::Type>(message.numberA);
1153 std::optional<std::uint8_t>
pressed;
1196 if (
globalState.pendingPressedButton == buttonIndex)
1246 globalState.activeActionButtonSlots != activeSlots)
1254 globalState.activeActionButtonSlots = activeSlots;
1264 globalState.visiblePropertySlots = visibleProperties;
1267 visibleProperties) == 0)
@ NotifyJailCardOwnership
@ ClearTradedImmunitiesOrFutures
@ NotifyTradeAcceptanceDecision
@ NotifyBuyOrAuctionDecision
@ NotifyFlatOrFractionTaxDecision
@ NotifyProposedConfiguration
@ NotifyPlayerBuySellMort
constexpr bool isIBarVisible(Screen2D screen) noexcept
void setBackdrop(Screen2D screen)
const State & stateReadOnly()
void cycleIBarCamera(std::int32_t currentSquare, bool sequential) noexcept
void playClickSound() noexcept
void playPennybagsVoice(udsound::PennybagsVoice line, udsound::TokenVoiceClipPolicy policy, bool watchAfterStart) noexcept
int propertyIndex(int square) noexcept
std::uint32_t PropertyMask
PropertyMask propertyBit(int square) noexcept
std::optional< int > propertyHit(int x, int y, PropertyMask visibleProperties) noexcept
std::optional< ActionButtonSlot > actionButtonHit(int x, int y, ActionButtonLayout layout, ActionButtonMask activeSlots) noexcept
Rect actionButtonRect(ActionButtonSlot slot, ActionButtonLayout layout) noexcept
unsigned int ActionButtonMask
constexpr Rect bankHitRect() noexcept
Rect playerSetupHitRect(int playerIndex, int numberOfPlayers) noexcept
constexpr std::uint8_t ExitButtonIndex
constexpr std::uint8_t MortgageButtonIndex
bool activateProperty(int square)
constexpr std::uint8_t DoneButtonIndex
constexpr std::uint8_t BuildButtonIndex
void processRuleMessage(const actions::Message &message, RuleMode projectedMode, std::uint64_t tick) noexcept
constexpr std::uint8_t AuctionButtonIndex
constexpr std::uint8_t PayButtonIndex
void clearPendingPressedButton(std::uint8_t buttonIndex) noexcept
void inspectPlayer(rules::PlayerNumber player) noexcept
bool requestNewGameConfirmation() noexcept
void processLibraryMessage(const uimsg::Message &message)
constexpr std::uint8_t TradeButtonIndex
constexpr std::uint8_t RollDiceButtonIndex
void setRuleActionHitState(layout::ActionButtonLayout buttonLayout, layout::ActionButtonMask activeSlots, RuleMode mode, rules::PlayerNumber player, bool remote) noexcept
constexpr std::uint8_t BankruptButtonIndex
constexpr std::uint8_t SellButtonIndex
constexpr std::uint8_t UseCardButtonIndex
constexpr std::uint8_t OptionsButtonIndex
constexpr std::uint8_t AuctionHotelButtonIndex
bool requestExitConfirmation() noexcept
constexpr std::uint8_t AuctionHouseButtonIndex
constexpr std::uint8_t BuyButtonIndex
constexpr std::uint8_t StatusButtonIndex
void restoreRuleTracking() noexcept
void tickActions(std::uint64_t numberOfTicks)
constexpr std::uint8_t NewGameButtonIndex
constexpr std::uint8_t MainButtonIndex
constexpr std::uint8_t CameraButtonIndex
RuleMode resolveRuleMode(RuleMode projectedMode, rules::PlayerNumber projectedPlayer) noexcept
rules::PlayerNumber resolveRulePlayer(rules::PlayerNumber projectedPlayer) noexcept
constexpr std::uint8_t FlatTaxButtonIndex
const State & stateReadOnly()
constexpr std::uint8_t PercentageButtonIndex
void setPropertyHitState(layout::PropertyMask visibleProperties) noexcept
constexpr std::uint8_t UnmortButtonIndex
bool sendAction(const actions::Message &message)
void reset(State &state) noexcept
void playerButtonClicked(rules::PlayerNumber player)
constexpr PlayerNumber BankPlayer
constexpr std::uint8_t CommunityCount
std::uint8_t PlayerNumber
constexpr std::uint8_t CommunityFirst
constexpr std::size_t SquareCount
constexpr PlayerNumber MaxPlayers
constexpr PlayerNumber NobodyPlayer
constexpr std::uint8_t ChanceFirst
constexpr std::uint8_t ChanceCount
std::uint64_t tickCount()
constexpr std::uint32_t BasicClockRateHz
@ PlayerClicks_BuyHouseHotel
@ PlayerClicks_UnMortgage
@ PlayerClicks_SellHouseHotel
PlayerNumber anyLocalPlayer(const GameState &uiState)
bool slotIsLocalAIPlayer(PlayerNumber slot)
bool slotIsLocalHumanPlayer(PlayerNumber slot)
bool slotIsLocalPlayer(PlayerNumber slot)
constexpr std::int64_t MouseModifierControl
const rules::GameState & ruleStateReadOnly()
const optionsui::State & optionsStateReadOnly() noexcept
bool beginTradeFromIBar(rules::PlayerNumber iBarPlayer) noexcept
bool beginOptionsFromIBar() noexcept
optionsui::State & optionsState() noexcept
std::array< PlayerDisplay, rules::MaxPlayers > players
bool contains(int x, int y) const noexcept