diff options
Diffstat (limited to 'tools/assign_ids/main.cpp')
-rw-r--r-- | tools/assign_ids/main.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/assign_ids/main.cpp b/tools/assign_ids/main.cpp index e3add66..ee55338 100644 --- a/tools/assign_ids/main.cpp +++ b/tools/assign_ids/main.cpp | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <google/protobuf/text_format.h> | 2 | #include <google/protobuf/text_format.h> |
3 | 3 | ||
4 | #include <cstdint> | 4 | #include <cstdint> |
5 | #include <filesystem> | ||
5 | #include <fstream> | 6 | #include <fstream> |
6 | #include <iostream> | 7 | #include <iostream> |
7 | #include <map> | 8 | #include <map> |
@@ -42,6 +43,7 @@ class AssignIds { | |||
42 | ProcessMaps(datadir_path); | 43 | ProcessMaps(datadir_path); |
43 | ProcessSpecialIds(); | 44 | ProcessSpecialIds(); |
44 | ProcessProgressivesFile(datadir_path / "progressives.txtpb"); | 45 | ProcessProgressivesFile(datadir_path / "progressives.txtpb"); |
46 | ProcessDoorGroupsFile(datadir_path / "door_groups.txtpb"); | ||
45 | 47 | ||
46 | WriteIds(ids_path); | 48 | WriteIds(ids_path); |
47 | 49 | ||
@@ -61,6 +63,7 @@ class AssignIds { | |||
61 | for (const auto& [_, room] : map.rooms()) { | 63 | for (const auto& [_, room] : map.rooms()) { |
62 | UpdateNextId(room.panels()); | 64 | UpdateNextId(room.panels()); |
63 | UpdateNextId(room.masteries()); | 65 | UpdateNextId(room.masteries()); |
66 | UpdateNextId(room.keyholders()); | ||
64 | } | 67 | } |
65 | } | 68 | } |
66 | 69 | ||
@@ -68,6 +71,7 @@ class AssignIds { | |||
68 | UpdateNextId(id_mappings_.letters()); | 71 | UpdateNextId(id_mappings_.letters()); |
69 | UpdateNextId(id_mappings_.endings()); | 72 | UpdateNextId(id_mappings_.endings()); |
70 | UpdateNextId(id_mappings_.progressives()); | 73 | UpdateNextId(id_mappings_.progressives()); |
74 | UpdateNextId(id_mappings_.door_groups()); | ||
71 | 75 | ||
72 | next_id_++; | 76 | next_id_++; |
73 | } | 77 | } |
@@ -267,6 +271,23 @@ class AssignIds { | |||
267 | } | 271 | } |
268 | } | 272 | } |
269 | 273 | ||
274 | void ProcessDoorGroupsFile(std::filesystem::path path) { | ||
275 | if (!std::filesystem::exists(path)) { | ||
276 | return; | ||
277 | } | ||
278 | |||
279 | auto h_groups = ReadMessageFromFile<HumanDoorGroups>(path.string()); | ||
280 | auto& groups = *output_.mutable_door_groups(); | ||
281 | |||
282 | for (const HumanDoorGroup& h_group : h_groups.door_groups()) { | ||
283 | if (!id_mappings_.door_groups().contains(h_group.name())) { | ||
284 | groups[h_group.name()] = next_id_++; | ||
285 | } else { | ||
286 | groups[h_group.name()] = id_mappings_.door_groups().at(h_group.name()); | ||
287 | } | ||
288 | } | ||
289 | } | ||
290 | |||
270 | private: | 291 | private: |
271 | void UpdateNextId(const google::protobuf::Map<std::string, uint64_t>& ids) { | 292 | void UpdateNextId(const google::protobuf::Map<std::string, uint64_t>& ids) { |
272 | for (const auto& [_, id] : ids) { | 293 | for (const auto& [_, id] : ids) { |