diff options
| author | Jiří Švejda <jirisvd@gmail.com> | 2023-12-18 17:28:50 +0100 |
|---|---|---|
| committer | Jiří Švejda <jirisvd@gmail.com> | 2024-08-11 19:03:01 +0200 |
| commit | bde8c5977b5b3f31619af182ffc521bbec98df78 (patch) | |
| tree | 6d94c3dc091025505534240550c2c228836279a1 | |
| parent | 2d0ee20ff30461b6b10f6fdfba87511a0ebc6642 (diff) | |
| download | redot-engine-bde8c5977b5b3f31619af182ffc521bbec98df78.tar.gz | |
Fix SoftBody3D pinned points breaking when reloading scene
| -rw-r--r-- | scene/3d/soft_body_3d.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/scene/3d/soft_body_3d.cpp b/scene/3d/soft_body_3d.cpp index db2c0e1387..f4ea428624 100644 --- a/scene/3d/soft_body_3d.cpp +++ b/scene/3d/soft_body_3d.cpp @@ -215,7 +215,13 @@ bool SoftBody3D::_set_property_pinned_points_attachment(int p_item, const String if ("spatial_attachment_path" == p_what) { PinnedPoint *w = pinned_points.ptrw(); - callable_mp(this, &SoftBody3D::_pin_point_deferred).call_deferred(Variant(w[p_item].point_index), true, p_value); + + if (is_inside_tree()) { + callable_mp(this, &SoftBody3D::_pin_point_deferred).call_deferred(Variant(w[p_item].point_index), true, p_value); + } else { + pin_point(w[p_item].point_index, true, p_value); + _make_cache_dirty(); + } } else if ("offset" == p_what) { PinnedPoint *w = pinned_points.ptrw(); w[p_item].offset = p_value; |
