about summary refs log tree commit diff stats
path: root/tools/datapacker/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/datapacker/main.cpp')
-rw-r--r--tools/datapacker/main.cpp121
1 files changed, 117 insertions, 4 deletions
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index d820360..596259b 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -43,6 +43,9 @@ class DataPacker {
43 43
44 ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt); 44 ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt);
45 ProcessMaps(datadir_path); 45 ProcessMaps(datadir_path);
46 ProcessProgressivesFile(datadir_path / "progressives.txtpb");
47 ProcessDoorGroupsFile(datadir_path / "door_groups.txtpb");
48 ProcessGlobalMetadataFile(datadir_path / "metadata.txtpb");
46 ProcessIdsFile(datadir_path / "ids.yaml"); 49 ProcessIdsFile(datadir_path / "ids.yaml");
47 50
48 { 51 {
@@ -104,7 +107,11 @@ class DataPacker {
104 container_.FindOrAddRoom(current_map_name, h_room.name(), std::nullopt); 107 container_.FindOrAddRoom(current_map_name, h_room.name(), std::nullopt);
105 Room& room = *container_.all_objects().mutable_rooms(room_id); 108 Room& room = *container_.all_objects().mutable_rooms(room_id);
106 109
107 room.set_display_name(h_room.display_name()); 110 // room.set_display_name(h_room.display_name());
111
112 if (h_room.has_panel_display_name()) {
113 room.set_panel_display_name(h_room.panel_display_name());
114 }
108 115
109 for (const HumanPanel& h_panel : h_room.panels()) { 116 for (const HumanPanel& h_panel : h_room.panels()) {
110 room.add_panels(ProcessPanel(h_panel, current_map_name, room.name())); 117 room.add_panels(ProcessPanel(h_panel, current_map_name, room.name()));
@@ -175,6 +182,10 @@ class DataPacker {
175 map_name, h_panel.required_room().name(), current_map_name)); 182 map_name, h_panel.required_room().name(), current_map_name));
176 } 183 }
177 184
185 if (h_panel.has_display_name()) {
186 panel.set_display_name(h_panel.display_name());
187 }
188
178 return panel_id; 189 return panel_id;
179 } 190 }
180 191
@@ -284,6 +295,10 @@ class DataPacker {
284 295
285 keyholder.set_path(h_keyholder.path()); 296 keyholder.set_path(h_keyholder.path());
286 297
298 if (h_keyholder.has_key()) {
299 keyholder.set_key(h_keyholder.key());
300 }
301
287 return keyholder_id; 302 return keyholder_id;
288 } 303 }
289 304
@@ -331,8 +346,8 @@ class DataPacker {
331 h_door.receivers().begin(), h_door.receivers().end(), 346 h_door.receivers().begin(), h_door.receivers().end(),
332 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers())); 347 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers()));
333 std::copy( 348 std::copy(
334 h_door.switches().begin(), h_door.switches().end(), 349 h_door.senders().begin(), h_door.senders().end(),
335 google::protobuf::RepeatedFieldBackInserter(door.mutable_switches())); 350 google::protobuf::RepeatedFieldBackInserter(door.mutable_senders()));
336 351
337 for (const PaintingIdentifier& pi : h_door.move_paintings()) { 352 for (const PaintingIdentifier& pi : h_door.move_paintings()) {
338 std::optional<std::string> map_name = 353 std::optional<std::string> map_name =
@@ -380,7 +395,7 @@ class DataPacker {
380 door.add_doors( 395 door.add_doors(
381 container_.FindOrAddDoor(map_name, di.name(), current_map_name)); 396 container_.FindOrAddDoor(map_name, di.name(), current_map_name));
382 } 397 }
383 398
384 for (const std::string& ending_name : h_door.endings()) { 399 for (const std::string& ending_name : h_door.endings()) {
385 door.add_endings(container_.FindOrAddEnding(ending_name)); 400 door.add_endings(container_.FindOrAddEnding(ending_name));
386 } 401 }
@@ -394,6 +409,14 @@ class DataPacker {
394 } 409 }
395 410
396 door.set_type(h_door.type()); 411 door.set_type(h_door.type());
412
413 if (h_door.has_location_name()) {
414 door.set_location_name(h_door.location_name());
415 }
416
417 if (h_door.has_double_letters()) {
418 door.set_double_letters(h_door.double_letters());
419 }
397 } 420 }
398 421
399 void ProcessConnectionsFile(std::filesystem::path path, 422 void ProcessConnectionsFile(std::filesystem::path path,
@@ -445,6 +468,21 @@ class DataPacker {
445 r_connection.set_required_door(door_id); 468 r_connection.set_required_door(door_id);
446 } 469 }
447 470
471 if (human_connection.has_roof_access()) {
472 f_connection.set_roof_access(human_connection.roof_access());
473 r_connection.set_roof_access(human_connection.roof_access());
474 }
475
476 if (human_connection.has_purple_ending()) {
477 f_connection.set_purple_ending(human_connection.purple_ending());
478 r_connection.set_purple_ending(human_connection.purple_ending());
479 }
480
481 if (human_connection.has_cyan_ending()) {
482 f_connection.set_cyan_ending(human_connection.cyan_ending());
483 r_connection.set_cyan_ending(human_connection.cyan_ending());
484 }
485
448 container_.AddConnection(f_connection); 486 container_.AddConnection(f_connection);
449 if (!human_connection.oneway()) { 487 if (!human_connection.oneway()) {
450 container_.AddConnection(r_connection); 488 container_.AddConnection(r_connection);
@@ -528,6 +566,63 @@ class DataPacker {
528 } 566 }
529 } 567 }
530 568
569 void ProcessProgressivesFile(std::filesystem::path path) {
570 if (!std::filesystem::exists(path)) {
571 return;
572 }
573
574 auto h_progs = ReadMessageFromFile<HumanProgressives>(path.string());
575
576 for (const HumanProgressive& h_prog : h_progs.progressives()) {
577 ProcessProgressive(h_prog);
578 }
579 }
580
581 void ProcessProgressive(const HumanProgressive& h_prog) {
582 uint64_t prog_id = container_.FindOrAddProgressive(h_prog.name());
583 Progressive& prog = *container_.all_objects().mutable_progressives(prog_id);
584
585 for (const DoorIdentifier& di : h_prog.doors()) {
586 uint64_t door_id =
587 container_.FindOrAddDoor(di.map(), di.name(), std::nullopt);
588 prog.add_doors(door_id);
589 }
590 }
591
592 void ProcessDoorGroupsFile(std::filesystem::path path) {
593 if (!std::filesystem::exists(path)) {
594 return;
595 }
596
597 auto h_groups = ReadMessageFromFile<HumanDoorGroups>(path.string());
598
599 for (const HumanDoorGroup& h_group : h_groups.door_groups()) {
600 ProcessDoorGroup(h_group);
601 }
602 }
603
604 void ProcessDoorGroup(const HumanDoorGroup& h_group) {
605 uint64_t group_id = container_.FindOrAddDoorGroup(h_group.name());
606 DoorGroup& group = *container_.all_objects().mutable_door_groups(group_id);
607
608 group.set_type(h_group.type());
609
610 for (const DoorIdentifier& di : h_group.doors()) {
611 uint64_t door_id =
612 container_.FindOrAddDoor(di.map(), di.name(), std::nullopt);
613 group.add_doors(door_id);
614 }
615 }
616
617 void ProcessGlobalMetadataFile(std::filesystem::path path) {
618 if (!std::filesystem::exists(path)) {
619 return;
620 }
621
622 auto h_metadata = ReadMessageFromFile<HumanGlobalMetadata>(path.string());
623 container_.all_objects().set_version(h_metadata.version());
624 }
625
531 void ProcessIdsFile(std::filesystem::path path) { 626 void ProcessIdsFile(std::filesystem::path path) {
532 auto ids = ReadIdsFromYaml(path.string()); 627 auto ids = ReadIdsFromYaml(path.string());
533 628
@@ -552,6 +647,14 @@ class DataPacker {
552 .mutable_masteries(mastery_id) 647 .mutable_masteries(mastery_id)
553 ->set_ap_id(ap_id); 648 ->set_ap_id(ap_id);
554 } 649 }
650
651 for (const auto& [keyholder_name, ap_id] : room.keyholders()) {
652 uint64_t keyholder_id = container_.FindOrAddKeyholder(
653 map_name, room_name, keyholder_name, std::nullopt, std::nullopt);
654 container_.all_objects()
655 .mutable_keyholders(keyholder_id)
656 ->set_ap_id(ap_id);
657 }
555 } 658 }
556 } 659 }
557 660
@@ -569,6 +672,16 @@ class DataPacker {
569 uint64_t ending_id = container_.FindOrAddEnding(ending_name); 672 uint64_t ending_id = container_.FindOrAddEnding(ending_name);
570 container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id); 673 container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id);
571 } 674 }
675
676 for (const auto& [prog_name, ap_id] : ids.progressives()) {
677 uint64_t prog_id = container_.FindOrAddProgressive(prog_name);
678 container_.all_objects().mutable_progressives(prog_id)->set_ap_id(ap_id);
679 }
680
681 for (const auto& [group_name, ap_id] : ids.door_groups()) {
682 uint64_t group_id = container_.FindOrAddDoorGroup(group_name);
683 container_.all_objects().mutable_door_groups(group_id)->set_ap_id(ap_id);
684 }
572 } 685 }
573 686
574 std::string mapdir_; 687 std::string mapdir_;