summary refs log tree commit diff stats
path: root/tools/datapacker/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/datapacker/main.cpp')
-rw-r--r--tools/datapacker/main.cpp43
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 }