Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
SequenceBitmapRenderData.cpp
Go to the documentation of this file.
3
5{
6 namespace
7 {
10 SequenceNodeId node,
11 data::DataId id,
12 std::string detail)
13 {
14 return {code, node, id, std::move(detail)};
15 }
16 }
17
18 std::expected<std::vector<SequenceBitmapRenderItem>,
20 const SequenceRuntime& runtime,
21 std::shared_ptr<const data::ResourceSnapshot> resources,
22 const data::RuntimeBitmapStore* runtimeBitmaps)
23 {
24 if (!resources)
25 return std::unexpected(error(
27 0, 0, "resource snapshot is null"));
28
29 std::vector<SequenceBitmapRenderItem> result;
30 for (const auto& instance : runtime.bitmapInstances())
31 {
32 if (runtimeBitmaps)
33 {
34 if (auto runtimeAsset = runtimeBitmaps->asset(instance.contentsDataId))
35 {
36 const auto& image = runtimeAsset->image;
37 result.push_back({instance.node, instance.contentsDataId,
38 instance.priority, instance.clock, instance.worldTransform,
39 {data::LegacyDataType::Native, image.width, image.height, 0, 0, 32},
40 {}, std::move(runtimeAsset), instance.bounds,
41 instance.rootSequenceDataId, instance.rootSequenceNode, instance.rootSequencePriority});
42 continue;
43 }
44 }
45
46 const auto metadata = resources->data().metadata(instance.contentsDataId);
47 if (!metadata)
48 return std::unexpected(error(
50 instance.node, instance.contentsDataId, metadata.error().detail));
53 return std::unexpected(error(
55 instance.node, instance.contentsDataId,
56 "2D sequence content is neither LE_DATA_DataBMP nor LE_DATA_DataUAP"));
57
58 const auto bytes = resources->data().load(instance.contentsDataId);
59 if (!bytes)
60 return std::unexpected(error(
62 instance.node, instance.contentsDataId, bytes.error().detail));
63
67 {
69 if (!bitmap)
70 return std::unexpected(error(
72 instance.node, instance.contentsDataId, bitmap.error().detail));
73 renderMetadata.width = static_cast<std::uint32_t>(bitmap->width);
74 renderMetadata.height = static_cast<std::uint32_t>(
75 bitmap->topDown() ? -static_cast<std::int64_t>(bitmap->height) : bitmap->height);
76 renderMetadata.bitsPerPixel = bitmap->bitsPerPixel;
77 }
78 else
79 {
80 const auto bitmap = data::inspectLegacyUap(**bytes);
81 if (!bitmap)
82 return std::unexpected(error(
84 instance.node, instance.contentsDataId, bitmap.error().detail));
85 renderMetadata.width = bitmap->width;
86 renderMetadata.height = bitmap->height;
87 renderMetadata.originX = instance.zeroBitmapOffset ? 0 : bitmap->originX;
88 renderMetadata.originY = instance.zeroBitmapOffset ? 0 : bitmap->originY;
89 renderMetadata.bitsPerPixel = 8;
90 }
91
92 result.push_back({instance.node, instance.contentsDataId,
93 instance.priority, instance.clock, instance.worldTransform,
94 renderMetadata, *bytes, {}, instance.bounds,
95 instance.rootSequenceDataId, instance.rootSequenceNode, instance.rootSequencePriority});
96 }
97 return result;
98 }
99}
LegacyBitmapMetadata metadata
LegacyBitmapRGBA8 image
std::vector< std::byte > bytes
data::DataId id
fonts::Runtime & runtime
unsigned index
std::string error
std::shared_ptr< const BitmapRuntimeAsset > asset(DataId id) const noexcept
std::uint32_t DataId
Definition DataBanks.hpp:10
std::expected< LegacyUapMetadata, BitmapError > inspectLegacyUap(std::span< const std::byte > bytes)
std::expected< LegacyBitmapMetadata, BitmapError > inspectLegacyBitmap(std::span< const std::byte > bytes)
std::expected< std::vector< SequenceBitmapRenderItem >, SequenceBitmapRenderDataError > collectSequenceBitmapRenderData(const SequenceRuntime &runtime, std::shared_ptr< const data::ResourceSnapshot > resources, const data::RuntimeBitmapStore *runtimeBitmaps)
std::uint64_t SequenceNodeId