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_; |