diff options
Diffstat (limited to 'tools/datapacker')
| -rw-r--r-- | tools/datapacker/container.cpp | 16 | ||||
| -rw-r--r-- | tools/datapacker/container.h | 3 | ||||
| -rw-r--r-- | tools/datapacker/main.cpp | 22 |
3 files changed, 41 insertions, 0 deletions
| 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) { | |||
| 205 | } | 205 | } |
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | uint64_t Container::FindOrAddEnding(std::string ending_name) { | ||
| 209 | auto it = ending_id_by_name_.find(ending_name); | ||
| 210 | if (it == ending_id_by_name_.end()) { | ||
| 211 | uint64_t new_id = all_objects_.endings_size(); | ||
| 212 | Ending* ending = all_objects_.add_endings(); | ||
| 213 | ending->set_id(new_id); | ||
| 214 | ending->set_name(ending_name); | ||
| 215 | |||
| 216 | ending_id_by_name_[ending_name] = new_id; | ||
| 217 | |||
| 218 | return new_id; | ||
| 219 | } else { | ||
| 220 | return it->second; | ||
| 221 | } | ||
| 222 | } | ||
| 223 | |||
| 208 | uint64_t Container::FindOrAddMastery(std::optional<std::string> map_name, | 224 | uint64_t Container::FindOrAddMastery(std::optional<std::string> map_name, |
| 209 | std::optional<std::string> room_name, | 225 | std::optional<std::string> room_name, |
| 210 | std::string mastery_name, | 226 | 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 { | |||
| 40 | 40 | ||
| 41 | uint64_t FindLetterByName(std::string letter_name); | 41 | uint64_t FindLetterByName(std::string letter_name); |
| 42 | 42 | ||
| 43 | uint64_t FindOrAddEnding(std::string ending_name); | ||
| 44 | |||
| 43 | uint64_t FindOrAddMastery(std::optional<std::string> map_name, | 45 | uint64_t FindOrAddMastery(std::optional<std::string> map_name, |
| 44 | std::optional<std::string> room_name, | 46 | std::optional<std::string> room_name, |
| 45 | std::string mastery_name, | 47 | std::string mastery_name, |
| @@ -79,6 +81,7 @@ class Container { | |||
| 79 | keyholder_id_by_map_room_keyholder_names_; | 81 | keyholder_id_by_map_room_keyholder_names_; |
| 80 | std::map<std::string, std::map<std::string, uint64_t>> | 82 | std::map<std::string, std::map<std::string, uint64_t>> |
| 81 | door_id_by_map_door_names_; | 83 | door_id_by_map_door_names_; |
| 84 | std::map<std::string, uint64_t> ending_id_by_name_; | ||
| 82 | }; | 85 | }; |
| 83 | 86 | ||
| 84 | } // namespace com::fourisland::lingo2_archipelago | 87 | } // 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 { | |||
| 115 | room.add_keyholders( | 115 | room.add_keyholders( |
| 116 | ProcessKeyholder(h_keyholder, current_map_name, room.name())); | 116 | ProcessKeyholder(h_keyholder, current_map_name, room.name())); |
| 117 | } | 117 | } |
| 118 | |||
| 119 | for (const HumanEnding& h_ending : h_room.endings()) { | ||
| 120 | room.add_endings(ProcessEnding(h_ending, current_map_name, room.name())); | ||
| 121 | } | ||
| 118 | } | 122 | } |
| 119 | 123 | ||
| 120 | uint64_t ProcessPanel(const HumanPanel& h_panel, | 124 | uint64_t ProcessPanel(const HumanPanel& h_panel, |
| @@ -266,6 +270,19 @@ class DataPacker { | |||
| 266 | return keyholder_id; | 270 | return keyholder_id; |
| 267 | } | 271 | } |
| 268 | 272 | ||
| 273 | uint64_t ProcessEnding(const HumanEnding& h_ending, | ||
| 274 | const std::string& current_map_name, | ||
| 275 | const std::string& current_room_name) { | ||
| 276 | uint64_t ending_id = container_.FindOrAddEnding(h_ending.name()); | ||
| 277 | Ending& ending = *container_.all_objects().mutable_endings(ending_id); | ||
| 278 | |||
| 279 | ending.set_room_id(container_.FindOrAddRoom( | ||
| 280 | current_map_name, current_room_name, std::nullopt)); | ||
| 281 | ending.set_path(h_ending.path()); | ||
| 282 | |||
| 283 | return ending_id; | ||
| 284 | } | ||
| 285 | |||
| 269 | void ProcessDoorsFile(std::filesystem::path path, | 286 | void ProcessDoorsFile(std::filesystem::path path, |
| 270 | const std::string& current_map_name) { | 287 | const std::string& current_map_name) { |
| 271 | if (!std::filesystem::exists(path)) { | 288 | if (!std::filesystem::exists(path)) { |
| @@ -526,6 +543,11 @@ class DataPacker { | |||
| 526 | uint64_t letter_id = container_.FindLetterByName(letter_name); | 543 | uint64_t letter_id = container_.FindLetterByName(letter_name); |
| 527 | container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id); | 544 | container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id); |
| 528 | } | 545 | } |
| 546 | |||
| 547 | for (const auto& [ending_name, ap_id] : ids.endings()) { | ||
| 548 | uint64_t ending_id = container_.FindOrAddEnding(ending_name); | ||
| 549 | container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id); | ||
| 550 | } | ||
| 529 | } | 551 | } |
| 530 | 552 | ||
| 531 | std::string mapdir_; | 553 | std::string mapdir_; |
