diff options
Diffstat (limited to 'tools/datapacker/main.cpp')
-rw-r--r-- | tools/datapacker/main.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 260ab62..7e7f7f7 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp | |||
@@ -109,6 +109,11 @@ class DataPacker { | |||
109 | room.add_masteries( | 109 | room.add_masteries( |
110 | ProcessMastery(h_mastery, current_map_name, room.name())); | 110 | ProcessMastery(h_mastery, current_map_name, room.name())); |
111 | } | 111 | } |
112 | |||
113 | for (const HumanKeyholder& h_keyholder : h_room.keyholders()) { | ||
114 | room.add_keyholders( | ||
115 | ProcessKeyholder(h_keyholder, current_map_name, room.name())); | ||
116 | } | ||
112 | } | 117 | } |
113 | 118 | ||
114 | uint64_t ProcessPanel(const HumanPanel& h_panel, | 119 | uint64_t ProcessPanel(const HumanPanel& h_panel, |
@@ -176,6 +181,10 @@ class DataPacker { | |||
176 | painting.set_enter_only(h_painting.enter_only()); | 181 | painting.set_enter_only(h_painting.enter_only()); |
177 | } | 182 | } |
178 | 183 | ||
184 | if (h_painting.has_exit_only()) { | ||
185 | painting.set_exit_only(h_painting.exit_only()); | ||
186 | } | ||
187 | |||
179 | if (h_painting.has_required_door()) { | 188 | if (h_painting.has_required_door()) { |
180 | std::optional<std::string> map_name = | 189 | std::optional<std::string> map_name = |
181 | h_painting.required_door().has_map() | 190 | h_painting.required_door().has_map() |
@@ -238,6 +247,20 @@ class DataPacker { | |||
238 | return mastery_id; | 247 | return mastery_id; |
239 | } | 248 | } |
240 | 249 | ||
250 | uint64_t ProcessKeyholder(const HumanKeyholder& h_keyholder, | ||
251 | const std::string& current_map_name, | ||
252 | const std::string& current_room_name) { | ||
253 | uint64_t keyholder_id = container_.FindOrAddKeyholder( | ||
254 | current_map_name, current_room_name, h_keyholder.name(), std::nullopt, | ||
255 | std::nullopt); | ||
256 | Keyholder& keyholder = | ||
257 | *container_.all_objects().mutable_keyholders(keyholder_id); | ||
258 | |||
259 | keyholder.set_path(h_keyholder.path()); | ||
260 | |||
261 | return keyholder_id; | ||
262 | } | ||
263 | |||
241 | void ProcessDoorsFile(std::filesystem::path path, | 264 | void ProcessDoorsFile(std::filesystem::path path, |
242 | const std::string& current_map_name) { | 265 | const std::string& current_map_name) { |
243 | if (!std::filesystem::exists(path)) { | 266 | if (!std::filesystem::exists(path)) { |
@@ -292,6 +315,26 @@ class DataPacker { | |||
292 | } | 315 | } |
293 | } | 316 | } |
294 | 317 | ||
318 | for (const KeyholderIdentifier& ki : h_door.keyholders()) { | ||
319 | KeyholderAnswer* answer = door.add_keyholders(); | ||
320 | |||
321 | std::optional<std::string> map_name = | ||
322 | ki.has_map() ? std::optional<std::string>(ki.map()) : std::nullopt; | ||
323 | answer->set_keyholder(container_.FindOrAddKeyholder( | ||
324 | map_name, ki.room(), ki.name(), current_map_name, std::nullopt)); | ||
325 | |||
326 | if (ki.has_key()) { | ||
327 | answer->set_key(ki.key()); | ||
328 | } | ||
329 | } | ||
330 | |||
331 | for (const RoomIdentifier& ri : h_door.rooms()) { | ||
332 | std::optional<std::string> map_name = | ||
333 | ri.has_map() ? std::optional<std::string>(ri.map()) : std::nullopt; | ||
334 | door.add_rooms( | ||
335 | container_.FindOrAddRoom(map_name, ri.name(), current_map_name)); | ||
336 | } | ||
337 | |||
295 | if (h_door.has_control_center_color()) { | 338 | if (h_door.has_control_center_color()) { |
296 | door.set_control_center_color(h_door.control_center_color()); | 339 | door.set_control_center_color(h_door.control_center_color()); |
297 | } | 340 | } |