diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2021-10-21 19:33:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-21 19:33:01 +0200 |
commit | 836f86688fc5e94b0e7028c0641f088a68d98386 (patch) | |
tree | d16513379662a3c525c0d71010f358d1d67fdb29 | |
parent | 0264efe895c1e708e661dfe7a7959114b34e32cb (diff) | |
parent | e6f7235ffb49e94a876756a9295b907ce7fc834a (diff) |
Merge pull request #54053 from nekomatata/fix-soft-body-disable-mode
Fix SoftDynamicBody3D crash when setting disable mode
-rw-r--r-- | modules/bullet/soft_body_bullet.cpp | 1 | ||||
-rw-r--r-- | scene/3d/soft_dynamic_body_3d.cpp | 8 | ||||
-rw-r--r-- | servers/physics_3d/godot_soft_body_3d.cpp | 1 |
3 files changed, 3 insertions, 7 deletions
diff --git a/modules/bullet/soft_body_bullet.cpp b/modules/bullet/soft_body_bullet.cpp index 81b832fb42..3a2370ff31 100644 --- a/modules/bullet/soft_body_bullet.cpp +++ b/modules/bullet/soft_body_bullet.cpp @@ -116,6 +116,7 @@ void SoftBodyBullet::set_soft_mesh(RID p_mesh) { } Array arrays = RenderingServer::get_singleton()->mesh_surface_get_arrays(soft_mesh, 0); + ERR_FAIL_COND(arrays.is_empty()); bool success = set_trimesh_body_shape(arrays[RS::ARRAY_INDEX], arrays[RS::ARRAY_VERTEX]); if (!success) { diff --git a/scene/3d/soft_dynamic_body_3d.cpp b/scene/3d/soft_dynamic_body_3d.cpp index 43292d42f1..903eedb58b 100644 --- a/scene/3d/soft_dynamic_body_3d.cpp +++ b/scene/3d/soft_dynamic_body_3d.cpp @@ -552,15 +552,9 @@ void SoftDynamicBody3D::set_disable_mode(DisableMode p_mode) { return; } - bool inside_tree = is_inside_tree(); - - if (inside_tree && (disable_mode == DISABLE_MODE_REMOVE)) { - _prepare_physics_server(); - } - disable_mode = p_mode; - if (inside_tree && (disable_mode == DISABLE_MODE_REMOVE)) { + if (mesh.is_valid() && is_inside_tree() && !is_enabled()) { _prepare_physics_server(); } } diff --git a/servers/physics_3d/godot_soft_body_3d.cpp b/servers/physics_3d/godot_soft_body_3d.cpp index d15235d27c..f214e3603a 100644 --- a/servers/physics_3d/godot_soft_body_3d.cpp +++ b/servers/physics_3d/godot_soft_body_3d.cpp @@ -139,6 +139,7 @@ void GodotSoftBody3D::set_mesh(RID p_mesh) { } Array arrays = RenderingServer::get_singleton()->mesh_surface_get_arrays(soft_mesh, 0); + ERR_FAIL_COND(arrays.is_empty()); bool success = create_from_trimesh(arrays[RenderingServer::ARRAY_INDEX], arrays[RenderingServer::ARRAY_VERTEX]); if (!success) { |