about summary refs log tree commit diff stats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/assign_ids/main.cpp32
-rw-r--r--tools/datapacker/main.cpp6
-rw-r--r--tools/util/ids_yaml_format.cpp13
-rw-r--r--tools/validator/human_processor.cpp20
-rw-r--r--tools/validator/structs.h1
-rw-r--r--tools/validator/validator.cpp13
6 files changed, 80 insertions, 5 deletions
diff --git a/tools/assign_ids/main.cpp b/tools/assign_ids/main.cpp index 357566a..8010a9a 100644 --- a/tools/assign_ids/main.cpp +++ b/tools/assign_ids/main.cpp
@@ -65,6 +65,7 @@ class AssignIds {
65 UpdateNextId(room.panels()); 65 UpdateNextId(room.panels());
66 UpdateNextId(room.masteries()); 66 UpdateNextId(room.masteries());
67 UpdateNextId(room.keyholders()); 67 UpdateNextId(room.keyholders());
68 UpdateNextId(room.ports());
68 } 69 }
69 } 70 }
70 71
@@ -245,6 +246,37 @@ class AssignIds {
245 .at(h_keyholder.name()); 246 .at(h_keyholder.name());
246 } 247 }
247 } 248 }
249
250 for (const HumanPort& h_port : h_room.ports()) {
251 if (h_port.no_shuffle()) {
252 continue;
253 }
254
255 auto& maps = *output_.mutable_maps();
256 auto& rooms = *maps[current_map_name].mutable_rooms();
257 auto& ports = *rooms[h_room.name()].mutable_ports();
258
259 if (!id_mappings_.maps().contains(current_map_name) ||
260 !id_mappings_.maps()
261 .at(current_map_name)
262 .rooms()
263 .contains(h_room.name()) ||
264 !id_mappings_.maps()
265 .at(current_map_name)
266 .rooms()
267 .at(h_room.name())
268 .ports()
269 .contains(h_port.name())) {
270 ports[h_port.name()] = next_id_++;
271 } else {
272 ports[h_port.name()] = id_mappings_.maps()
273 .at(current_map_name)
274 .rooms()
275 .at(h_room.name())
276 .ports()
277 .at(h_port.name());
278 }
279 }
248 } 280 }
249 281
250 void ProcessSpecialIds() { 282 void ProcessSpecialIds() {
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index bda4ee4..cf811c9 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -679,6 +679,12 @@ class DataPacker {
679 .mutable_keyholders(keyholder_id) 679 .mutable_keyholders(keyholder_id)
680 ->set_ap_id(ap_id); 680 ->set_ap_id(ap_id);
681 } 681 }
682
683 for (const auto& [port_name, ap_id] : room.ports()) {
684 uint64_t port_id = container_.FindOrAddPort(
685 map_name, room_name, port_name, std::nullopt, std::nullopt);
686 container_.all_objects().mutable_ports(port_id)->set_ap_id(ap_id);
687 }
682 } 688 }
683 } 689 }
684 690
diff --git a/tools/util/ids_yaml_format.cpp b/tools/util/ids_yaml_format.cpp index 71bfd63..5b9113b 100644 --- a/tools/util/ids_yaml_format.cpp +++ b/tools/util/ids_yaml_format.cpp
@@ -64,6 +64,13 @@ IdMappings ReadIdsFromYaml(const std::string& filename) {
64 keyholder_it.second.as<uint64_t>(); 64 keyholder_it.second.as<uint64_t>();
65 } 65 }
66 } 66 }
67
68 if (room_it.second["ports"]) {
69 for (const auto& port_it : room_it.second["ports"]) {
70 (*room_ids.mutable_ports())[port_it.first.as<std::string>()] =
71 port_it.second.as<uint64_t>();
72 }
73 }
67 } 74 }
68 } 75 }
69 76
@@ -146,6 +153,12 @@ void WriteIdsAsYaml(const IdMappings& ids, const std::string& filename) {
146 keyholder_id; 153 keyholder_id;
147 }); 154 });
148 155
156 OperateOnSortedMap(
157 room_ids.ports(),
158 [&room_node](const std::string& port_name, uint64_t port_id) {
159 room_node["ports"][port_name] = port_id;
160 });
161
149 map_node["rooms"][room_name] = std::move(room_node); 162 map_node["rooms"][room_name] = std::move(room_node);
150 }); 163 });
151 164
diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index 407d951..ffa9765 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp
@@ -570,12 +570,14 @@ class HumanProcessor {
570 auto ids = ReadIdsFromYaml(path.string()); 570 auto ids = ReadIdsFromYaml(path.string());
571 571
572 DoorIdentifier di; 572 DoorIdentifier di;
573 PanelIdentifier pi; 573 PanelIdentifier pai;
574 PortIdentifier poi;
574 KeyholderIdentifier ki; 575 KeyholderIdentifier ki;
575 576
576 for (const auto& [map_name, map] : ids.maps()) { 577 for (const auto& [map_name, map] : ids.maps()) {
577 di.set_map(map_name); 578 di.set_map(map_name);
578 pi.set_map(map_name); 579 pai.set_map(map_name);
580 poi.set_map(map_name);
579 ki.set_map(map_name); 581 ki.set_map(map_name);
580 582
581 for (const auto& [door_name, ap_id] : map.doors()) { 583 for (const auto& [door_name, ap_id] : map.doors()) {
@@ -586,13 +588,14 @@ class HumanProcessor {
586 } 588 }
587 589
588 for (const auto& [room_name, room] : map.rooms()) { 590 for (const auto& [room_name, room] : map.rooms()) {
589 pi.set_room(room_name); 591 pai.set_room(room_name);
592 poi.set_room(room_name);
590 ki.set_room(room_name); 593 ki.set_room(room_name);
591 594
592 for (const auto& [panel_name, ap_id] : room.panels()) { 595 for (const auto& [panel_name, ap_id] : room.panels()) {
593 pi.set_name(panel_name); 596 pai.set_name(panel_name);
594 597
595 PanelInfo& panel_info = info_.panels[pi]; 598 PanelInfo& panel_info = info_.panels[pai];
596 panel_info.has_id = true; 599 panel_info.has_id = true;
597 } 600 }
598 601
@@ -606,6 +609,13 @@ class HumanProcessor {
606 KeyholderInfo& keyholder_info = info_.keyholders[ki]; 609 KeyholderInfo& keyholder_info = info_.keyholders[ki];
607 keyholder_info.has_id = true; 610 keyholder_info.has_id = true;
608 } 611 }
612
613 for (const auto& [port_name, ap_id] : room.ports()) {
614 poi.set_name(port_name);
615
616 PortInfo& port_info = info_.ports[poi];
617 port_info.has_id = true;
618 }
609 } 619 }
610 } 620 }
611 621
diff --git a/tools/validator/structs.h b/tools/validator/structs.h index 51215e9..62974a8 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h
@@ -56,6 +56,7 @@ struct DoorInfo {
56 56
57struct PortInfo { 57struct PortInfo {
58 std::vector<HumanPort> definitions; 58 std::vector<HumanPort> definitions;
59 bool has_id = false;
59 60
60 std::vector<HumanConnection> connections_referenced_by; 61 std::vector<HumanConnection> connections_referenced_by;
61 std::vector<HumanConnection> target_connections_referenced_by; 62 std::vector<HumanConnection> target_connections_referenced_by;
diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index 5f8e0ba..a99447a 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp
@@ -269,6 +269,10 @@ class Validator {
269 for (const std::string& map_name : port_info.map_worldport_entrances) { 269 for (const std::string& map_name : port_info.map_worldport_entrances) {
270 std::cout << " MAP (worldport_entrance) " << map_name << std::endl; 270 std::cout << " MAP (worldport_entrance) " << map_name << std::endl;
271 } 271 }
272
273 if (port_info.has_id) {
274 std::cout << " An AP ID is present." << std::endl;
275 }
272 } else if (port_info.definitions.size() > 1) { 276 } else if (port_info.definitions.size() > 1) {
273 std::cout << "Port " << port_identifier.ShortDebugString() 277 std::cout << "Port " << port_identifier.ShortDebugString()
274 << " was defined multiple times." << std::endl; 278 << " was defined multiple times." << std::endl;
@@ -301,6 +305,15 @@ class Validator {
301 std::cout << "Port " << port_identifier.ShortDebugString() 305 std::cout << "Port " << port_identifier.ShortDebugString()
302 << " is shuffleable and missing a rotation." << std::endl; 306 << " is shuffleable and missing a rotation." << std::endl;
303 } 307 }
308 if (!port_info.has_id) {
309 std::cout << "Port " << port_identifier.ShortDebugString()
310 << " is missing an AP ID." << std::endl;
311 }
312 } else {
313 if (port_info.has_id) {
314 std::cout << "Port " << port_identifier.ShortDebugString()
315 << " should not have an AP ID." << std::endl;
316 }
304 } 317 }
305 } 318 }
306 } 319 }