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 | } |
