summary refs log tree commit diff stats
path: root/tools/assign_ids/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/assign_ids/main.cpp')
-rw-r--r--tools/assign_ids/main.cpp21
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) {