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.cpp95
1 files changed, 91 insertions, 4 deletions
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 4923fce..c13a4df 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,7 @@ 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());
108 111
109 if (h_room.has_panel_display_name()) { 112 if (h_room.has_panel_display_name()) {
110 room.set_panel_display_name(h_room.panel_display_name()); 113 room.set_panel_display_name(h_room.panel_display_name());
@@ -292,6 +295,10 @@ class DataPacker {
292 295
293 keyholder.set_path(h_keyholder.path()); 296 keyholder.set_path(h_keyholder.path());
294 297
298 if (h_keyholder.has_key()) {
299 keyholder.set_key(h_keyholder.key());
300 }
301
295 return keyholder_id; 302 return keyholder_id;
296 } 303 }
297 304
@@ -339,8 +346,8 @@ class DataPacker {
339 h_door.receivers().begin(), h_door.receivers().end(), 346 h_door.receivers().begin(), h_door.receivers().end(),
340 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers())); 347 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers()));
341 std::copy( 348 std::copy(
342 h_door.switches().begin(), h_door.switches().end(), 349 h_door.senders().begin(), h_door.senders().end(),
343 google::protobuf::RepeatedFieldBackInserter(door.mutable_switches())); 350 google::protobuf::RepeatedFieldBackInserter(door.mutable_senders()));
344 351
345 for (const PaintingIdentifier& pi : h_door.move_paintings()) { 352 for (const PaintingIdentifier& pi : h_door.move_paintings()) {
346 std::optional<std::string> map_name = 353 std::optional<std::string> map_name =
@@ -388,7 +395,7 @@ class DataPacker {
388 door.add_doors( 395 door.add_doors(
389 container_.FindOrAddDoor(map_name, di.name(), current_map_name)); 396 container_.FindOrAddDoor(map_name, di.name(), current_map_name));
390 } 397 }
391 398
392 for (const std::string& ending_name : h_door.endings()) { 399 for (const std::string& ending_name : h_door.endings()) {
393 door.add_endings(container_.FindOrAddEnding(ending_name)); 400 door.add_endings(container_.FindOrAddEnding(ending_name));
394 } 401 }
@@ -461,6 +468,11 @@ class DataPacker {
461 r_connection.set_required_door(door_id); 468 r_connection.set_required_door(door_id);
462 } 469 }
463 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
464 container_.AddConnection(f_connection); 476 container_.AddConnection(f_connection);
465 if (!human_connection.oneway()) { 477 if (!human_connection.oneway()) {
466 container_.AddConnection(r_connection); 478 container_.AddConnection(r_connection);
@@ -544,6 +556,63 @@ class DataPacker {
544 } 556 }
545 } 557 }
546 558
559 void ProcessProgressivesFile(std::filesystem::path path) {
560 if (!std::filesystem::exists(path)) {
561 return;
562 }
563
564 auto h_progs = ReadMessageFromFile<HumanProgressives>(path.string());
565
566 for (const HumanProgressive& h_prog : h_progs.progressives()) {
567 ProcessProgressive(h_prog);
568 }
569 }
570
571 void ProcessProgressive(const HumanProgressive& h_prog) {
572 uint64_t prog_id = container_.FindOrAddProgressive(h_prog.name());
573 Progressive& prog = *container_.all_objects().mutable_progressives(prog_id);
574
575 for (const DoorIdentifier& di : h_prog.doors()) {
576 uint64_t door_id =
577 container_.FindOrAddDoor(di.map(), di.name(), std::nullopt);
578 prog.add_doors(door_id);
579 }
580 }
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
547 void ProcessIdsFile(std::filesystem::path path) { 616 void ProcessIdsFile(std::filesystem::path path) {
548 auto ids = ReadIdsFromYaml(path.string()); 617 auto ids = ReadIdsFromYaml(path.string());
549 618
@@ -568,6 +637,14 @@ class DataPacker {
568 .mutable_masteries(mastery_id) 637 .mutable_masteries(mastery_id)
569 ->set_ap_id(ap_id); 638 ->set_ap_id(ap_id);
570 } 639 }
640
641 for (const auto& [keyholder_name, ap_id] : room.keyholders()) {
642 uint64_t keyholder_id = container_.FindOrAddKeyholder(
643 map_name, room_name, keyholder_name, std::nullopt, std::nullopt);
644 container_.all_objects()
645 .mutable_keyholders(keyholder_id)
646 ->set_ap_id(ap_id);
647 }
571 } 648 }
572 } 649 }
573 650
@@ -585,6 +662,16 @@ class DataPacker {
585 uint64_t ending_id = container_.FindOrAddEnding(ending_name); 662 uint64_t ending_id = container_.FindOrAddEnding(ending_name);
586 container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id); 663 container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id);
587 } 664 }
665
666 for (const auto& [prog_name, ap_id] : ids.progressives()) {
667 uint64_t prog_id = container_.FindOrAddProgressive(prog_name);
668 container_.all_objects().mutable_progressives(prog_id)->set_ap_id(ap_id);
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 }
588 } 675 }
589 676
590 std::string mapdir_; 677 std::string mapdir_;