Porytiles
Loading...
Searching...
No Matches
shape_group_metadata.cpp
Go to the documentation of this file.
2
3namespace porytiles {
4
6 const std::vector<ShapeGroup<Rgba32>> &shape_groups, const std::vector<PackableTile::Id> &combined_index_to_id)
7{
8 ShapeGroupMetadata metadata;
9
10 for (const auto &group : shape_groups) {
11 std::vector<PackableTile::Id> member_ids;
12 member_ids.reserve(group.members.size());
13
14 for (const auto &member : group.members) {
15 const auto &id = combined_index_to_id.at(member.tile_index);
16 // Primary tiles are never packed, so they don't need biased packing metadata
17 if (std::holds_alternative<PackableTile::PrimaryTileId>(id)) {
18 continue;
19 }
20 member_ids.push_back(id);
21 }
22
23 if (member_ids.empty()) {
24 continue;
25 }
26
27 std::size_t group_index = metadata.group_members.size();
28 for (const auto &id : member_ids) {
29 metadata.tile_id_to_group[id] = group_index;
30 }
31
32 metadata.group_members.push_back(std::move(member_ids));
33 }
34
35 return metadata;
36}
37
38} // namespace porytiles
ShapeGroupMetadata build_shape_group_metadata(const std::vector< ShapeGroup< Rgba32 > > &shape_groups, const std::vector< PackableTile::Id > &combined_index_to_id)
Builds ShapeGroupMetadata from shape groups and a combined-index-to-ID mapping.
Metadata that maps PackableTile IDs to shape group membership for sharing-aware packing.
std::map< PackableTile::Id, std::size_t > tile_id_to_group
Maps PackableTile::Id to its shape group index.
std::vector< std::vector< PackableTile::Id > > group_members
For each group, the list of PackableTile::Ids that belong to it.
A group of tiles that share the same canonical shape but have different color assignments.