From 21e334efcda30845f0d95b274fba7bb3f6f04004 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 10 Aug 2025 12:42:36 -0400 Subject: Assigned IDs for the_congruent Keyholders are packed now. Doors can rely on keyholders and rooms. Paintings can be exit only. --- tools/datapacker/main.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'tools/datapacker/main.cpp') 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 { room.add_masteries( ProcessMastery(h_mastery, current_map_name, room.name())); } + + for (const HumanKeyholder& h_keyholder : h_room.keyholders()) { + room.add_keyholders( + ProcessKeyholder(h_keyholder, current_map_name, room.name())); + } } uint64_t ProcessPanel(const HumanPanel& h_panel, @@ -176,6 +181,10 @@ class DataPacker { painting.set_enter_only(h_painting.enter_only()); } + if (h_painting.has_exit_only()) { + painting.set_exit_only(h_painting.exit_only()); + } + if (h_painting.has_required_door()) { std::optional map_name = h_painting.required_door().has_map() @@ -238,6 +247,20 @@ class DataPacker { return mastery_id; } + uint64_t ProcessKeyholder(const HumanKeyholder& h_keyholder, + const std::string& current_map_name, + const std::string& current_room_name) { + uint64_t keyholder_id = container_.FindOrAddKeyholder( + current_map_name, current_room_name, h_keyholder.name(), std::nullopt, + std::nullopt); + Keyholder& keyholder = + *container_.all_objects().mutable_keyholders(keyholder_id); + + keyholder.set_path(h_keyholder.path()); + + return keyholder_id; + } + void ProcessDoorsFile(std::filesystem::path path, const std::string& current_map_name) { if (!std::filesystem::exists(path)) { @@ -292,6 +315,26 @@ class DataPacker { } } + for (const KeyholderIdentifier& ki : h_door.keyholders()) { + KeyholderAnswer* answer = door.add_keyholders(); + + std::optional map_name = + ki.has_map() ? std::optional(ki.map()) : std::nullopt; + answer->set_keyholder(container_.FindOrAddKeyholder( + map_name, ki.room(), ki.name(), current_map_name, std::nullopt)); + + if (ki.has_key()) { + answer->set_key(ki.key()); + } + } + + for (const RoomIdentifier& ri : h_door.rooms()) { + std::optional map_name = + ri.has_map() ? std::optional(ri.map()) : std::nullopt; + door.add_rooms( + container_.FindOrAddRoom(map_name, ri.name(), current_map_name)); + } + if (h_door.has_control_center_color()) { door.set_control_center_color(h_door.control_center_color()); } -- cgit 1.4.1