20 constexpr std::uint32_t
White = 0x00FFFFFFU;
31 std::size_t
index)
noexcept
54 struct RestoreDefaultFont
final
57 std::optional<fonts::Settings>
caller;
74 std::expected<void, std::string> CashTextPlayback::ensureSurfaces(
77 for (
auto& surface : textSurfaces_)
79 if (surface)
continue;
96 std::array<bool, 4> visible{};
104 const auto resources =
playback.resources();
109 !
state.playerSelectVisible &&
state.cashDialogSide < 2 &&
113 return std::unexpected(
"Trade cash text font runtime is unavailable");
120 std::vector<Published>
desired;
125 if (!visible[
index])
continue;
134 if (!readoutSurface_)
142 resources->context().board);
143 if (!
text)
return std::unexpected(
text.error());
145 if (!readoutText_ || *readoutText_ != *
text || !readoutFont_ || *readoutFont_ != settings)
147 constexpr int scale = 3;
149 9 * scale, 600,
false,
false,
false,
true);
150 if (!
raster)
return std::unexpected(
raster.error().detail);
155 return std::unexpected(
"Trade cash popup amount exceeds its qualified header: "+
156 std::to_string(
raster->width)+
"x"+std::to_string(
raster->height)+
" vs "+
157 std::to_string(
image.width)+
"x"+std::to_string(
image.height));
163 const auto updated =
playback.runtimeBitmaps().update(*readoutSurface_, std::move(
image),
165 if (!updated)
return updated;
166 readoutText_ = *
text;
167 readoutFont_ = settings;
174 std::vector<std::shared_ptr<const sequence::SequenceProgram>>
programs;
176 std::shared_ptr<const sequence::SequenceProgram>
iconProgram;
177 for (
const auto&
object :
desired)
183 if (!program)
return std::unexpected(program.error().detail);
184 programs.push_back(std::move(*program));
191 if (!
loaded)
return std::unexpected(
loaded.error().detail);
200 return std::unexpected(
201 "sequence command queue cannot fit Trade cash-text transition");
205 const auto resources =
playback.resources();
207 return std::unexpected(
"Trade cash text has no resource snapshot");
210 const auto selected =
fontRuntime->restoreSettings(8);
212 return std::unexpected(
213 "Trade cash title-font slot is unavailable: " +
214 selected.error().detail);
220 if (!visible[
index])
continue;
222 state.cashDesired[
index], monetarySystem,
true,
223 resources->context().board);
224 if (!
text)
return std::unexpected(
text.error());
244 if (!
native)
return std::unexpected(
native.error().detail);
245 if (!
raster)
return std::unexpected(
raster.error().detail);
249 const auto updated =
playback.runtimeBitmaps().update(
251 if (!updated)
return std::unexpected(updated.error());
264 playback.forceRedraw(
id, readoutSurface_ &&
id == *readoutSurface_
271 std::any_of(current_.begin(), current_.end(),
272 [&](
const Published&
object) { return object.id == *readoutSurface_; }));
273 for (
const auto&
object : current_)
277 object.id,
object.
priority,
false}))
278 return std::unexpected(
"validated Trade cash-text stop rejected");
283 if (
retainPublished && std::find(current_.begin(), current_.end(),
object) != current_.end())
continue;
285 programs[index], object.priority, {},
287 return std::unexpected(
"validated Trade cash-text start rejected");
291 const auto retained = std::find_if(current_.begin(), current_.end(),
292 [&](
const Published&
object) { return object.id == id &&
293 std::find(desired.begin(), desired.end(), object) != desired.end(); });
306 textSurfaces_.fill(std::nullopt);
307 textCache_.fill(std::nullopt);
309 readoutSurface_.reset(); readoutText_.reset(); readoutFont_.reset();
310 modernAA_.fill(
false); fontSettings_.fill(std::nullopt);
std::optional< fonts::Settings > caller
static constexpr std::size_t Capacity
static std::expected< std::shared_ptr< const SequenceProgram >, RuntimeError > rawBitmap(data::DataId id, data::LegacyDataType sourceType, DescriptionLimits limits={})
static std::expected< std::shared_ptr< const SequenceProgram >, RuntimeError > load(const data::DataSource &source, data::DataId id, std::size_t offset=0, DescriptionLimits limits={})
std::expected< void, std::string > sync(const State &state, const rules::GameState &gameState, display::Screen2D desiredView, int monetarySystem, fonts::Runtime *fontRuntime, engine::SequencePlayback &playback, bool modernAA=false, bool modernCashReadout=false)
std::expected< void, std::string > blitStraightRGBA8(LegacyBitmapRGBA8 &destination, const LegacyBitmapRGBA8 &source, std::int32_t destinationX, std::int32_t destinationY, BitmapBlitMode mode)
bool isRuntimeBitmapDataId(DataId id) noexcept
constexpr DataId packDataId(std::uint16_t group, DataTag tag) noexcept
std::expected< std::string, std::string > format(std::int64_t defaultValue, int monetarySystem, bool printSymbol, data::BoardEdition edition)
constexpr PlayerNumber MaxPlayers
SequenceTransform moveXYTransform(std::int32_t x, std::int32_t y) noexcept
constexpr std::uint16_t TradeCashReadoutPriority
constexpr std::uint16_t TradeCashTextPriority
constexpr std::uint32_t TradeCashReadoutHeight
constexpr std::array< std::int32_t, 2 > TradeCashDialogX
constexpr std::array< std::int32_t, 2 > TradeCashDialogY
constexpr data::DataTag TradeCashIconTag
constexpr std::array< std::int32_t, 4 > TradeCashIconY
constexpr std::uint32_t TradeCashReadoutWidth
constexpr std::array< std::int32_t, 4 > TradeCashTextY
constexpr std::array< std::int32_t, 4 > TradeCashIconX
constexpr std::array< std::int32_t, 4 > TradeCashTextX
constexpr std::array< std::uint16_t, 4 > TradeCashIconPriorities
std::vector< std::uint8_t > pixels