Merge pull request #100792 from lyuma/post_import_plugin_subresources
Allow post-import plugins to modify `_subresources`
This commit is contained in:
commit
a7d84fa022
@ -71,6 +71,7 @@
|
|||||||
<param index="0" name="scene" type="Node" />
|
<param index="0" name="scene" type="Node" />
|
||||||
<description>
|
<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 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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_import_option">
|
<method name="add_import_option">
|
||||||
|
@ -2934,39 +2934,23 @@ Error ResourceImporterScene::import(ResourceUID::ID p_source_id, const String &p
|
|||||||
|
|
||||||
Dictionary subresources = p_options["_subresources"];
|
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;
|
Error err = OK;
|
||||||
|
|
||||||
// Check whether any of the meshes or animations have nonexistent save paths
|
// Check whether any of the meshes or animations have nonexistent save paths
|
||||||
// and if they do, fail the import immediately.
|
// and if they do, fail the import immediately.
|
||||||
err = _check_resource_save_paths(mesh_data);
|
if (subresources.has("meshes")) {
|
||||||
|
err = _check_resource_save_paths(subresources["meshes"]);
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err = _check_resource_save_paths(animation_data);
|
if (subresources.has("animations")) {
|
||||||
|
err = _check_resource_save_paths(subresources["animations"]);
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<String> missing_deps; // for now, not much will be done with this
|
List<String> missing_deps; // for now, not much will be done with this
|
||||||
Node *scene = importer->import_scene(src_path, import_flags, p_options, &missing_deps, &err);
|
Node *scene = importer->import_scene(src_path, import_flags, p_options, &missing_deps, &err);
|
||||||
@ -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);
|
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;
|
float fps = 30;
|
||||||
if (p_options.has(SNAME("animation/fps"))) {
|
if (p_options.has(SNAME("animation/fps"))) {
|
||||||
fps = (float)p_options[SNAME("animation/fps")];
|
fps = (float)p_options[SNAME("animation/fps")];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user