2
0
mirror of https://github.com/godotengine/godot.git synced 2025-04-13 01:00:35 +08:00

Merge pull request from lyuma/post_import_plugin_subresources

Allow post-import plugins to modify `_subresources`
This commit is contained in:
Rémi Verschelde 2025-01-08 00:21:03 +01:00
commit a7d84fa022
2 changed files with 32 additions and 26 deletions

@ -71,6 +71,7 @@
<param index="0" name="scene" type="Node" />
<description>
Pre Process the scene. This function is called right after the scene format loader loaded the scene and no changes have been made.
Pre process may be used to adjust internal import options in the [code]"nodes"[/code], [code]"meshes"[/code], [code]"animations"[/code] or [code]"materials"[/code] keys inside [code]get_option_value("_subresources")[/code].
</description>
</method>
<method name="add_import_option">

@ -2934,38 +2934,22 @@ Error ResourceImporterScene::import(ResourceUID::ID p_source_id, const String &p
Dictionary subresources = p_options["_subresources"];
Dictionary node_data;
if (subresources.has("nodes")) {
node_data = subresources["nodes"];
}
Dictionary material_data;
if (subresources.has("materials")) {
material_data = subresources["materials"];
}
Dictionary animation_data;
if (subresources.has("animations")) {
animation_data = subresources["animations"];
}
Dictionary mesh_data;
if (subresources.has("meshes")) {
mesh_data = subresources["meshes"];
}
Error err = OK;
// Check whether any of the meshes or animations have nonexistent save paths
// and if they do, fail the import immediately.
err = _check_resource_save_paths(mesh_data);
if (err != OK) {
return err;
if (subresources.has("meshes")) {
err = _check_resource_save_paths(subresources["meshes"]);
if (err != OK) {
return err;
}
}
err = _check_resource_save_paths(animation_data);
if (err != OK) {
return err;
if (subresources.has("animations")) {
err = _check_resource_save_paths(subresources["animations"]);
if (err != OK) {
return err;
}
}
List<String> missing_deps; // for now, not much will be done with this
@ -3005,6 +2989,27 @@ Error ResourceImporterScene::import(ResourceUID::ID p_source_id, const String &p
post_importer_plugins.write[i]->pre_process(scene, p_options);
}
// data in _subresources may be modified by pre_process(), so wait until now to check.
Dictionary node_data;
if (subresources.has("nodes")) {
node_data = subresources["nodes"];
}
Dictionary material_data;
if (subresources.has("materials")) {
material_data = subresources["materials"];
}
Dictionary animation_data;
if (subresources.has("animations")) {
animation_data = subresources["animations"];
}
Dictionary mesh_data;
if (subresources.has("meshes")) {
mesh_data = subresources["meshes"];
}
float fps = 30;
if (p_options.has(SNAME("animation/fps"))) {
fps = (float)p_options[SNAME("animation/fps")];