diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-02-10 18:46:00 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-02-10 18:46:00 +0100 |
commit | 766bb88159905b764b7fff483089195bfe06c133 (patch) | |
tree | d66275f7bd3dd2bd7d75a62e75f7ab062e95eec6 /editor/import/scene_import_settings.cpp | |
parent | 73c53cca81fc1d003b02fa96d9fcf4647df16950 (diff) | |
parent | b95219ef0f48261a277dda224cc30cc212221c4f (diff) | |
download | redot-engine-766bb88159905b764b7fff483089195bfe06c133.tar.gz |
Merge pull request #71691 from hcoura/res-importer-gen-physics-mesh-only-when-needed
Fix SceneImportSettings perf issues
Diffstat (limited to 'editor/import/scene_import_settings.cpp')
-rw-r--r-- | editor/import/scene_import_settings.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/editor/import/scene_import_settings.cpp b/editor/import/scene_import_settings.cpp index 8d26feebf4..6eebb84216 100644 --- a/editor/import/scene_import_settings.cpp +++ b/editor/import/scene_import_settings.cpp @@ -64,6 +64,11 @@ class SceneImportSettingsData : public Object { current[p_name] = p_value; + // SceneImportSettings must decide if a new collider should be generated or not + if (category == ResourceImporterScene::INTERNAL_IMPORT_CATEGORY_MESH_3D_NODE) { + SceneImportSettings::get_singleton()->request_generate_collider(); + } + if (SceneImportSettings::get_singleton()->is_editing_animation()) { if (category == ResourceImporterScene::INTERNAL_IMPORT_CATEGORY_MAX) { if (ResourceImporterScene::get_animation_singleton()->get_option_visibility(path, p_name, current)) { @@ -420,9 +425,9 @@ void SceneImportSettings::_update_view_gizmos() { return; } for (const KeyValue<String, NodeData> &e : node_map) { - bool generate_collider = false; + bool show_collider_view = false; if (e.value.settings.has(SNAME("generate/physics"))) { - generate_collider = e.value.settings[SNAME("generate/physics")]; + show_collider_view = e.value.settings[SNAME("generate/physics")]; } MeshInstance3D *mesh_node = Object::cast_to<MeshInstance3D>(e.value.node); @@ -436,7 +441,7 @@ void SceneImportSettings::_update_view_gizmos() { CRASH_COND_MSG(descendants.is_empty(), "This is unreachable, since the collider view is always created even when the collision is not used! If this is triggered there is a bug on the function `_fill_scene`."); MeshInstance3D *collider_view = static_cast<MeshInstance3D *>(descendants[0].operator Object *()); - collider_view->set_visible(generate_collider); + collider_view->set_visible(show_collider_view); if (generate_collider) { // This collider_view doesn't have a mesh so we need to generate a new one. @@ -466,6 +471,8 @@ void SceneImportSettings::_update_view_gizmos() { collider_view->set_transform(transform); } } + + generate_collider = false; } void SceneImportSettings::_update_camera() { @@ -530,6 +537,10 @@ void SceneImportSettings::_load_default_subresource_settings(HashMap<StringName, } } +void SceneImportSettings::request_generate_collider() { + generate_collider = true; +} + void SceneImportSettings::update_view() { update_view_timer->start(); } |