about 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.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 1dcd109..4b26141 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -42,6 +42,7 @@ class DataPacker {
42 42
43 ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt); 43 ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt);
44 ProcessMaps(datadir_path); 44 ProcessMaps(datadir_path);
45 ProcessIdsFile(datadir_path / "ids.txtpb");
45 46
46 { 47 {
47 std::ofstream outputfile(outputpath_); 48 std::ofstream outputfile(outputpath_);
@@ -389,6 +390,26 @@ class DataPacker {
389 } 390 }
390 } 391 }
391 392
393 void ProcessIdsFile(std::filesystem::path path) {
394 auto ids = ReadMessageFromFile<IdMappings>(path.string());
395
396 for (const auto& [map_name, map] : ids.maps()) {
397 for (const auto& [door_name, ap_id] : map.doors()) {
398 uint64_t door_id =
399 container_.FindOrAddDoor(map_name, door_name, std::nullopt);
400 container_.all_objects().mutable_doors(door_id)->set_ap_id(ap_id);
401 }
402
403 for (const auto& [room_name, room] : map.rooms()) {
404 for (const auto& [panel_name, ap_id] : room.panels()) {
405 uint64_t panel_id = container_.FindOrAddPanel(
406 map_name, room_name, panel_name, std::nullopt, std::nullopt);
407 container_.all_objects().mutable_panels(panel_id)->set_ap_id(ap_id);
408 }
409 }
410 }
411 }
412
392 std::string mapdir_; 413 std::string mapdir_;
393 std::string outputpath_; 414 std::string outputpath_;
394 415
n class="o">::filesystem::path(repodir_) / "objects" / "scenes" / (map_name + ".tscn"); std::string scene_path_str = scene_path.string(); std::cout << "Processing " << scene_path_str << std::endl; GodotScene scene = ReadGodotSceneFromFile(scene_path_str); for (const GodotNode& node : scene.GetNodes()) { ProcessMapNode(scene, node, map_info); } } void ProcessMapNode(const GodotScene& scene, const GodotNode& node, MapInfo& map_info) { if (std::holds_alternative<GodotExtResourceRef>(node.instance_type)) { const GodotExtResourceRef& ext_resource_ref = std::get<GodotExtResourceRef>(node.instance_type); const GodotExtResource* ext_resource = scene.GetExtResource(ext_resource_ref.id); if (ext_resource != nullptr && (kImportantNodeTypes.count(ext_resource->path) || ext_resource->path.starts_with("res://objects/meshes/paintings/"))) { map_info.game_nodes[node.GetPath()].defined = true; } } } private: std::string repodir_; CollectedInfo& info_; }; } // namespace void ProcessGodotData(const std::string& repodir, CollectedInfo& info) { GodotProcessor godot_processor(repodir, info); godot_processor.Run(); } } // namespace com::fourisland::lingo2_archipelago