diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2014-05-02 01:49:42 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2014-05-02 01:49:42 +0400 |
commit | 5f80a7ffe25fdda77904d06c8e7b6ff37731d25b (patch) | |
tree | 6535b37dfda976453c2b0259149ffec58ceb8f3b /source/gameengine/Converter/KX_BlenderSceneConverter.cpp | |
parent | b75b0a11e0151a71e5d330f0833d1f5b5aa30e91 (diff) |
Fix T39932: LibNew can't find LibLoaded meshes.
LibNew now searchs dynamic (i.e., LibLoaded) mains instead of just the current main.
Diffstat (limited to 'source/gameengine/Converter/KX_BlenderSceneConverter.cpp')
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index bad99b5518b..5930d5e90d2 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -1458,6 +1458,20 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene, { /* Find a mesh in the current main */ ID *me= static_cast<ID *>(BLI_findstring(&m_maggie->mesh, name, offsetof(ID, name) + 2)); + Main *from_maggie = m_maggie; + + if (me == NULL) { + // The mesh wasn't in the current main, try any dynamic (i.e., LibLoaded) ones + vector<Main*>::iterator it; + + for (it = GetMainDynamic().begin(); it != GetMainDynamic().end(); it++) { + me = static_cast<ID *>(BLI_findstring(&(*it)->mesh, name, offsetof(ID, name) + 2)); + from_maggie = *it; + + if (me) + break; + } + } if (me==NULL) { printf("Could not be found \"%s\"\n", name); @@ -1467,10 +1481,10 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene, /* Watch this!, if its used in the original scene can cause big troubles */ if (me->us > 0) { printf("Mesh has a user \"%s\"\n", name); - me = (ID*)BKE_mesh_copy((Mesh*)me); + me = (ID*)BKE_mesh_copy_ex(from_maggie, (Mesh*)me); me->us--; } - BLI_remlink(&m_maggie->mesh, me); /* even if we made the copy it needs to be removed */ + BLI_remlink(&from_maggie->mesh, me); /* even if we made the copy it needs to be removed */ BLI_addtail(&maggie->mesh, me); @@ -1496,7 +1510,7 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene, mat_new->id.flag |= LIB_DOIT; mat_old->id.us--; - BLI_remlink(&m_maggie->mat, mat_new); + BLI_remlink(&G.main->mat, mat_new); // BKE_material_copy uses G.main, and there is no BKE_material_copy_ex BLI_addtail(&maggie->mat, mat_new); mesh->mat[i] = mat_new; |