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.cpp45
1 files changed, 43 insertions, 2 deletions
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 595647d..c13a4df 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -44,6 +44,8 @@ class DataPacker {
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"); 46 ProcessProgressivesFile(datadir_path / "progressives.txtpb");
47 ProcessDoorGroupsFile(datadir_path / "door_groups.txtpb");
48 ProcessGlobalMetadataFile(datadir_path / "metadata.txtpb");
47 ProcessIdsFile(datadir_path / "ids.yaml"); 49 ProcessIdsFile(datadir_path / "ids.yaml");
48 50
49 { 51 {
@@ -344,8 +346,8 @@ class DataPacker {
344 h_door.receivers().begin(), h_door.receivers().end(), 346 h_door.receivers().begin(), h_door.receivers().end(),
345 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers())); 347 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers()));
346 std::copy( 348 std::copy(
347 h_door.switches().begin(), h_door.switches().end(), 349 h_door.senders().begin(), h_door.senders().end(),
348 google::protobuf::RepeatedFieldBackInserter(door.mutable_switches())); 350 google::protobuf::RepeatedFieldBackInserter(door.mutable_senders()));
349 351
350 for (const PaintingIdentifier& pi : h_door.move_paintings()) { 352 for (const PaintingIdentifier& pi : h_door.move_paintings()) {
351 std::optional<std::string> map_name = 353 std::optional<std::string> map_name =
@@ -577,6 +579,40 @@ class DataPacker {
577 } 579 }
578 } 580 }
579 581
582 void ProcessDoorGroupsFile(std::filesystem::path path) {
583 if (!std::filesystem::exists(path)) {
584 return;
585 }
586
587 auto h_groups = ReadMessageFromFile<HumanDoorGroups>(path.string());
588
589 for (const HumanDoorGroup& h_group : h_groups.door_groups()) {
590 ProcessDoorGroup(h_group);
591 }
592 }
593
594 void ProcessDoorGroup(const HumanDoorGroup& h_group) {
595 uint64_t group_id = container_.FindOrAddDoorGroup(h_group.name());
596 DoorGroup& group = *container_.all_objects().mutable_door_groups(group_id);
597
598 group.set_type(h_group.type());
599
600 for (const DoorIdentifier& di : h_group.doors()) {
601 uint64_t door_id =
602 container_.FindOrAddDoor(di.map(), di.name(), std::nullopt);
603 group.add_doors(door_id);
604 }
605 }
606
607 void ProcessGlobalMetadataFile(std::filesystem::path path) {
608 if (!std::filesystem::exists(path)) {
609 return;
610 }
611
612 auto h_metadata = ReadMessageFromFile<HumanGlobalMetadata>(path.string());
613 container_.all_objects().set_version(h_metadata.version());
614 }
615
580 void ProcessIdsFile(std::filesystem::path path) { 616 void ProcessIdsFile(std::filesystem::path path) {
581 auto ids = ReadIdsFromYaml(path.string()); 617 auto ids = ReadIdsFromYaml(path.string());
582 618
@@ -631,6 +667,11 @@ class DataPacker {
631 uint64_t prog_id = container_.FindOrAddProgressive(prog_name); 667 uint64_t prog_id = container_.FindOrAddProgressive(prog_name);
632 container_.all_objects().mutable_progressives(prog_id)->set_ap_id(ap_id); 668 container_.all_objects().mutable_progressives(prog_id)->set_ap_id(ap_id);
633 } 669 }
670
671 for (const auto& [group_name, ap_id] : ids.door_groups()) {
672 uint64_t group_id = container_.FindOrAddDoorGroup(group_name);
673 container_.all_objects().mutable_door_groups(group_id)->set_ap_id(ap_id);
674 }
634 } 675 }
635 676
636 std::string mapdir_; 677 std::string mapdir_;