From 9ca8681ca5f134d65eaa4b5ae68d57ba67fe98d6 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 9 Aug 2025 11:51:20 -0400 Subject: Added support for masteries Also assigned IDs for the_butterfly, as well as already configured letters. --- tools/datapacker/main.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) (limited to 'tools/datapacker/main.cpp') diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 28dbc6b..2ad97b0 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp @@ -101,9 +101,14 @@ class DataPacker { room.add_ports(ProcessPort(h_port, current_map_name, room.name())); } - std::copy( - h_room.letters().begin(), h_room.letters().end(), - google::protobuf::RepeatedFieldBackInserter(room.mutable_letters())); + for (const HumanLetter& h_letter : h_room.letters()) { + room.add_letters(ProcessLetter(h_letter, current_map_name, room.name())); + } + + for (const HumanMastery& h_mastery : h_room.masteries()) { + room.add_masteries( + ProcessMastery(h_mastery, current_map_name, room.name())); + } } uint64_t ProcessPanel(const HumanPanel& h_panel, @@ -197,6 +202,33 @@ class DataPacker { return port_id; } + uint64_t ProcessLetter(const HumanLetter& h_letter, + const std::string& current_map_name, + const std::string& current_room_name) { + uint64_t letter_id = + container_.FindOrAddLetter(h_letter.key(), h_letter.double_()); + Letter& letter = *container_.all_objects().mutable_letters(letter_id); + + letter.set_room_id(container_.FindOrAddRoom( + current_map_name, current_room_name, std::nullopt)); + letter.set_path(h_letter.path()); + + return letter_id; + } + + uint64_t ProcessMastery(const HumanMastery& h_mastery, + const std::string& current_map_name, + const std::string& current_room_name) { + uint64_t mastery_id = container_.FindOrAddMastery( + current_map_name, current_room_name, h_mastery.name(), std::nullopt, + std::nullopt); + Mastery& mastery = *container_.all_objects().mutable_masteries(mastery_id); + + mastery.set_path(h_mastery.path()); + + return mastery_id; + } + void ProcessDoorsFile(std::filesystem::path path, const std::string& current_map_name) { if (!std::filesystem::exists(path)) { @@ -410,6 +442,14 @@ class DataPacker { map_name, room_name, panel_name, std::nullopt, std::nullopt); container_.all_objects().mutable_panels(panel_id)->set_ap_id(ap_id); } + + for (const auto& [mastery_name, ap_id] : room.masteries()) { + uint64_t mastery_id = container_.FindOrAddMastery( + map_name, room_name, mastery_name, std::nullopt, std::nullopt); + container_.all_objects() + .mutable_masteries(mastery_id) + ->set_ap_id(ap_id); + } } } @@ -417,6 +457,11 @@ class DataPacker { for (const auto& [tag, id] : ids.special()) { specials[tag] = id; } + + for (const auto& [letter_name, ap_id] : ids.letters()) { + uint64_t letter_id = container_.FindLetterByName(letter_name); + container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id); + } } std::string mapdir_; -- cgit 1.4.1