summaryrefslogtreecommitdiffstats
path: root/editor/plugins/mesh_library_editor_plugin.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2019-06-03 13:59:43 +0200
committerGitHub <noreply@github.com>2019-06-03 13:59:43 +0200
commit0dac4d6db6553a90ed5e9daf06fe3a1cd3e3fb5f (patch)
tree2356764b04c5e929b512b2f1973b4f3db1eb25e2 /editor/plugins/mesh_library_editor_plugin.cpp
parentb3162a2a28e039c32d138fdf7ae464cf6b19cd18 (diff)
parent6df53e0401fd7c2f8e81cd7d8189584706d3d7d8 (diff)
downloadredot-engine-0dac4d6db6553a90ed5e9daf06fe3a1cd3e3fb5f.tar.gz
Merge pull request #25522 from aqnuep/MeshLibrary_improvements
MeshLibrary export improvements
Diffstat (limited to 'editor/plugins/mesh_library_editor_plugin.cpp')
-rw-r--r--editor/plugins/mesh_library_editor_plugin.cpp30
1 files changed, 27 insertions, 3 deletions
diff --git a/editor/plugins/mesh_library_editor_plugin.cpp b/editor/plugins/mesh_library_editor_plugin.cpp
index 18586b2fe5..e582f6ded2 100644
--- a/editor/plugins/mesh_library_editor_plugin.cpp
+++ b/editor/plugins/mesh_library_editor_plugin.cpp
@@ -71,6 +71,8 @@ void MeshLibraryEditor::_import_scene(Node *p_scene, Ref<MeshLibrary> p_library,
if (!p_merge)
p_library->clear();
+ Map<int, MeshInstance *> mesh_instances;
+
for (int i = 0; i < p_scene->get_child_count(); i++) {
Node *child = p_scene->get_child(i);
@@ -91,6 +93,15 @@ void MeshLibraryEditor::_import_scene(Node *p_scene, Ref<MeshLibrary> p_library,
if (mesh.is_null())
continue;
+ mesh = mesh->duplicate();
+ for (int j = 0; j < mesh->get_surface_count(); ++j) {
+ Ref<Material> mat = mi->get_surface_material(j);
+
+ if (mat.is_valid()) {
+ mesh->surface_set_material(j, mat);
+ }
+ }
+
int id = p_library->find_item_by_name(mi->get_name());
if (id < 0) {
@@ -100,6 +111,7 @@ void MeshLibraryEditor::_import_scene(Node *p_scene, Ref<MeshLibrary> p_library,
}
p_library->set_item_mesh(id, mesh);
+ mesh_instances[id] = mi;
Vector<MeshLibrary::ShapeData> collisions;
@@ -159,14 +171,26 @@ void MeshLibraryEditor::_import_scene(Node *p_scene, Ref<MeshLibrary> p_library,
if (1) {
Vector<Ref<Mesh> > meshes;
+ Vector<Transform> transforms;
Vector<int> ids = p_library->get_item_list();
for (int i = 0; i < ids.size(); i++) {
- meshes.push_back(p_library->get_item_mesh(ids[i]));
+
+ if (mesh_instances.find(ids[i])) {
+
+ meshes.push_back(p_library->get_item_mesh(ids[i]));
+ transforms.push_back(mesh_instances[ids[i]]->get_transform());
+ }
}
- Vector<Ref<Texture> > textures = EditorInterface::get_singleton()->make_mesh_previews(meshes, EditorSettings::get_singleton()->get("editors/grid_map/preview_size"));
+ Vector<Ref<Texture> > textures = EditorInterface::get_singleton()->make_mesh_previews(meshes, &transforms, EditorSettings::get_singleton()->get("editors/grid_map/preview_size"));
+ int j = 0;
for (int i = 0; i < ids.size(); i++) {
- p_library->set_item_preview(ids[i], textures[i]);
+
+ if (mesh_instances.find(ids[i])) {
+
+ p_library->set_item_preview(ids[i], textures[j]);
+ j++;
+ }
}
}
}