Fix SoftBody memory corruption when using invalid mesh

In case of failure the new soft body wasn't created but the previous one
wasn't destroyed, causing discrepancies with visual server updates.
This commit is contained in:
PouleyKetchoupp 2021-10-20 10:39:16 -07:00
parent ff132ca278
commit 63f6d91a1a

View file

@ -117,19 +117,17 @@ void SoftBodyBullet::update_visual_server(SoftBodyVisualServerHandler *p_visual_
} }
void SoftBodyBullet::set_soft_mesh(const Ref<Mesh> &p_mesh) { void SoftBodyBullet::set_soft_mesh(const Ref<Mesh> &p_mesh) {
if (p_mesh.is_null()) { destroy_soft_body();
soft_mesh.unref();
} else { soft_mesh = p_mesh;
soft_mesh = p_mesh;
}
if (soft_mesh.is_null()) { if (soft_mesh.is_null()) {
destroy_soft_body();
return; return;
} }
Array arrays = soft_mesh->surface_get_arrays(0);
ERR_FAIL_COND(!(soft_mesh->surface_get_format(0) & VS::ARRAY_FORMAT_INDEX)); ERR_FAIL_COND(!(soft_mesh->surface_get_format(0) & VS::ARRAY_FORMAT_INDEX));
Array arrays = soft_mesh->surface_get_arrays(0);
set_trimesh_body_shape(arrays[VS::ARRAY_INDEX], arrays[VS::ARRAY_VERTEX]); set_trimesh_body_shape(arrays[VS::ARRAY_INDEX], arrays[VS::ARRAY_VERTEX]);
} }