Skip to content

Commit

Permalink
Merge pull request #100792 from lyuma/post_import_plugin_subresources
Browse files Browse the repository at this point in the history
Allow post-import plugins to modify `_subresources`
  • Loading branch information
akien-mga committed Jan 7, 2025
2 parents f7b9a6a + 637fe3c commit a7d84fa
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 26 deletions.
1 change: 1 addition & 0 deletions doc/classes/EditorScenePostImportPlugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down
57 changes: 31 additions & 26 deletions editor/import/3d/resource_importer_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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")];
Expand Down

0 comments on commit a7d84fa

Please sign in to comment.