Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
IBarCameraButtonPlayback.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "DataBanks.hpp"
5
6#include <cstdint>
7#include <expected>
8#include <string>
9
10namespace monopoly::ibar
11{
12 inline constexpr data::DataTag ButtonBaseTag = 0x008A;
13 inline constexpr data::DataTag AIButtonBaseTag = 0x0106;
14 inline constexpr std::uint16_t ButtonBasePriority = 999;
15 inline constexpr std::uint16_t CameraButtonPriority = ButtonBasePriority;
16 inline constexpr std::uint8_t AuctionButtonIndex = 0;
17 inline constexpr std::uint8_t BuyButtonIndex = 1;
18 inline constexpr std::uint8_t CameraButtonIndex = 2;
19 inline constexpr std::uint8_t DoneButtonIndex = 3;
20 inline constexpr std::uint8_t SellButtonIndex = 4;
21 inline constexpr std::uint8_t FlatTaxButtonIndex = 5;
22 inline constexpr std::uint8_t PercentageButtonIndex = 6;
23 inline constexpr std::uint8_t BuildButtonIndex = 7;
24 inline constexpr std::uint8_t TradeAcceptButtonIndex = 8;
25 inline constexpr std::uint8_t TradeCounterButtonIndex = 9;
26 inline constexpr std::uint8_t BankruptButtonIndex = 10;
27 inline constexpr std::uint8_t TradeRejectButtonIndex = 11;
28 inline constexpr std::uint8_t MortgageButtonIndex = 12;
29 inline constexpr std::uint8_t MainButtonIndex = 13;
30 inline constexpr std::uint8_t OptionsButtonIndex = 14;
31 inline constexpr std::uint8_t PayButtonIndex = 15;
32 inline constexpr std::uint8_t NewGameButtonIndex = 16;
33 inline constexpr std::uint8_t RollDiceButtonIndex = 17;
34 inline constexpr std::uint8_t StatusButtonIndex = 18;
35 inline constexpr std::uint8_t TradeButtonIndex = 19;
36 inline constexpr std::uint8_t UnmortButtonIndex = 20;
37 inline constexpr std::uint8_t ExitButtonIndex = 21;
38 inline constexpr std::uint8_t PlayAgainButtonIndex = 22;
39 inline constexpr std::uint8_t UseCardButtonIndex = 23;
40 inline constexpr std::uint8_t AuctionHouseButtonIndex = 24;
41 inline constexpr std::uint8_t AuctionHotelButtonIndex = 25;
42 inline constexpr std::uint8_t PlaceHouseButtonIndex = 26;
43 inline constexpr std::uint8_t PlaceHotelButtonIndex = 27;
44 inline constexpr std::uint8_t ButtonAnimationsPerSet = 4;
45 inline constexpr std::uint8_t CameraButtonStayAtEnd = 2;
46 inline constexpr std::uint8_t CameraButtonLoopToBeginning = 3;
47
48 enum class CameraButtonVisualState : std::int8_t
49 {
50 Off = -1,
51 In = 0,
52 Idle = 1,
53 Out = 2,
54 Pressed = 3
55 };
56
57 [[nodiscard]] constexpr std::uint16_t actionButtonPriority(
58 std::uint8_t buttonIndex) noexcept
59 {
60 switch (buttonIndex)
61 {
64 return ButtonBasePriority + 1;
66 case SellButtonIndex:
70 case PayButtonIndex:
72 return ButtonBasePriority + 2;
73 case DoneButtonIndex:
74 case BuyButtonIndex:
79 return ButtonBasePriority + 3;
80 default:
81 return ButtonBasePriority;
82 }
83 }
84
86 std::uint8_t buttonIndex,
88 bool useGreyButtons = false) noexcept
89 {
91 return data::EmptyDataId;
92 const auto mode = static_cast<std::uint8_t>(state);
94 return data::packDataId(
96 static_cast<data::DataTag>(baseTag +
97 buttonIndex * ButtonAnimationsPerSet + mode));
98 }
99
105
111
113 {
114 public:
117 : buttonIndex_(buttonIndex),
119 {
120 }
121
122 [[nodiscard]] std::expected<void, std::string> sync(
123 bool desired,
125 bool useGreyButtons = false,
126 bool buttonBarStable = true,
127 bool allowIncoming = true,
128 bool requestPressed = false);
129
131 {
132 visualState_ = CameraButtonVisualState::Off;
133 currentSequence_ = data::EmptyDataId;
134 currentGrey_ = false;
135 }
136
138 {
139 return visualState_;
140 }
141
143 {
144 return currentSequence_;
145 }
146
148 {
149 return buttonIndex_;
150 }
151
152 [[nodiscard]] std::uint16_t priority() const noexcept
153 {
154 return priority_;
155 }
156
158 {
159 return currentGrey_;
160 }
161
162 private:
163 std::uint8_t buttonIndex_{CameraButtonIndex};
164 std::uint16_t priority_{ButtonBasePriority};
166 data::DataId currentSequence_{data::EmptyDataId};
167 bool currentGrey_{};
168 };
169
171 {
172 public:
173 [[nodiscard]] std::expected<void, std::string> sync(
174 bool desired,
176 bool buttonBarStable = true,
177 bool allowIncoming = true)
178 {
179 return core_.sync(desired, playback, false, buttonBarStable, allowIncoming);
180 }
181
183 {
184 core_.reset();
185 }
186
191
196
197 private:
199 };
200}
unsigned index
CameraButtonVisualState visualState() const noexcept
std::expected< void, std::string > sync(bool desired, engine::SequencePlayback &playback, bool useGreyButtons=false, bool buttonBarStable=true, bool allowIncoming=true, bool requestPressed=false)
CameraButtonPlayback(std::uint8_t buttonIndex=CameraButtonIndex) noexcept
CameraButtonVisualState visualState() const noexcept
std::expected< void, std::string > sync(bool desired, engine::SequencePlayback &playback, bool buttonBarStable=true, bool allowIncoming=true)
std::uint32_t DataId
Definition DataBanks.hpp:10
constexpr DataId EmptyDataId
Definition DataBanks.hpp:13
std::uint16_t DataTag
Definition DataBanks.hpp:11
constexpr DataId packDataId(std::uint16_t group, DataTag tag) noexcept
Definition DataBanks.hpp:39
constexpr std::uint8_t ExitButtonIndex
constexpr std::uint8_t PlaceHouseButtonIndex
constexpr std::uint8_t MortgageButtonIndex
constexpr std::uint8_t DoneButtonIndex
constexpr std::uint8_t TradeRejectButtonIndex
constexpr std::uint16_t actionButtonPriority(std::uint8_t buttonIndex) noexcept
constexpr data::DataTag AIButtonBaseTag
constexpr std::uint8_t BuildButtonIndex
constexpr std::uint8_t ButtonAnimationsPerSet
constexpr std::uint16_t ButtonBasePriority
constexpr std::uint8_t AuctionButtonIndex
constexpr std::uint8_t PayButtonIndex
constexpr data::DataTag ButtonBaseTag
constexpr std::uint8_t TradeAcceptButtonIndex
constexpr std::uint8_t TradeButtonIndex
constexpr std::uint8_t RollDiceButtonIndex
constexpr std::uint8_t BankruptButtonIndex
constexpr data::DataId cameraButtonSequence(CameraButtonVisualState state) noexcept
constexpr std::uint8_t SellButtonIndex
constexpr std::uint8_t UseCardButtonIndex
constexpr data::DataId actionButtonSequence(std::uint8_t buttonIndex, CameraButtonVisualState state, bool useGreyButtons=false) noexcept
constexpr std::uint8_t OptionsButtonIndex
constexpr std::uint8_t PlayAgainButtonIndex
constexpr std::uint8_t TradeCounterButtonIndex
constexpr std::uint8_t PlaceHotelButtonIndex
constexpr std::uint8_t AuctionHotelButtonIndex
constexpr data::DataId optionsButtonSequence(CameraButtonVisualState state) noexcept
constexpr std::uint16_t CameraButtonPriority
constexpr std::uint8_t AuctionHouseButtonIndex
constexpr std::uint8_t BuyButtonIndex
constexpr std::uint8_t StatusButtonIndex
constexpr std::uint8_t CameraButtonLoopToBeginning
constexpr std::uint8_t NewGameButtonIndex
constexpr std::uint8_t MainButtonIndex
State & state()
Definition IBar.cpp:1285
constexpr std::uint8_t CameraButtonStayAtEnd
constexpr std::uint8_t CameraButtonIndex
constexpr std::uint8_t FlatTaxButtonIndex
constexpr std::uint8_t PercentageButtonIndex
constexpr std::uint8_t UnmortButtonIndex