mirror of
https://github.com/godotengine/godot.git
synced 2025-01-22 10:32:54 -05:00
Allow post-import plugins to modify _subresources
The old code fetched some data before the `EditorScenePostImportPlugin._pre_process` callback. While the callback could modify existing keys, this prevented users from adding new data on a fresh import. By fetching the keys after pre_process, this means users can consistently modify import options for nodes, meshes, materials and animations in a post-import plugin.
This commit is contained in:
parent
0f95e9f8e6
commit
637fe3ccdd
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")];
|
||||
|
|
Loading…
Reference in a new issue