From d77c73397b684faa55f0e95484ac89ca68bde1ad Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 20 Aug 2025 15:03:18 -0400 Subject: Added "endings" object type --- tools/datapacker/container.cpp | 16 ++++++++++++++++ tools/datapacker/container.h | 3 +++ tools/datapacker/main.cpp | 22 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) (limited to 'tools/datapacker') diff --git a/tools/datapacker/container.cpp b/tools/datapacker/container.cpp index ffcb75a..0d3417e 100644 --- a/tools/datapacker/container.cpp +++ b/tools/datapacker/container.cpp @@ -205,6 +205,22 @@ uint64_t Container::FindLetterByName(std::string letter_name) { } } +uint64_t Container::FindOrAddEnding(std::string ending_name) { + auto it = ending_id_by_name_.find(ending_name); + if (it == ending_id_by_name_.end()) { + uint64_t new_id = all_objects_.endings_size(); + Ending* ending = all_objects_.add_endings(); + ending->set_id(new_id); + ending->set_name(ending_name); + + ending_id_by_name_[ending_name] = new_id; + + return new_id; + } else { + return it->second; + } +} + uint64_t Container::FindOrAddMastery(std::optional map_name, std::optional room_name, std::string mastery_name, diff --git a/tools/datapacker/container.h b/tools/datapacker/container.h index e1a84d8..68f5875 100644 --- a/tools/datapacker/container.h +++ b/tools/datapacker/container.h @@ -40,6 +40,8 @@ class Container { uint64_t FindLetterByName(std::string letter_name); + uint64_t FindOrAddEnding(std::string ending_name); + uint64_t FindOrAddMastery(std::optional map_name, std::optional room_name, std::string mastery_name, @@ -79,6 +81,7 @@ class Container { keyholder_id_by_map_room_keyholder_names_; std::map> door_id_by_map_door_names_; + std::map ending_id_by_name_; }; } // namespace com::fourisland::lingo2_archipelago diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 0beb304..c5a90e9 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp @@ -115,6 +115,10 @@ class DataPacker { room.add_keyholders( ProcessKeyholder(h_keyholder, current_map_name, room.name())); } + + for (const HumanEnding& h_ending : h_room.endings()) { + room.add_endings(ProcessEnding(h_ending, current_map_name, room.name())); + } } uint64_t ProcessPanel(const HumanPanel& h_panel, @@ -266,6 +270,19 @@ class DataPacker { return keyholder_id; } + uint64_t ProcessEnding(const HumanEnding& h_ending, + const std::string& current_map_name, + const std::string& current_room_name) { + uint64_t ending_id = container_.FindOrAddEnding(h_ending.name()); + Ending& ending = *container_.all_objects().mutable_endings(ending_id); + + ending.set_room_id(container_.FindOrAddRoom( + current_map_name, current_room_name, std::nullopt)); + ending.set_path(h_ending.path()); + + return ending_id; + } + void ProcessDoorsFile(std::filesystem::path path, const std::string& current_map_name) { if (!std::filesystem::exists(path)) { @@ -526,6 +543,11 @@ class DataPacker { uint64_t letter_id = container_.FindLetterByName(letter_name); container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id); } + + for (const auto& [ending_name, ap_id] : ids.endings()) { + uint64_t ending_id = container_.FindOrAddEnding(ending_name); + container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id); + } } std::string mapdir_; -- cgit 1.4.1