summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scene/3d/skeleton_3d.cpp16
-rw-r--r--scene/3d/skeleton_3d.h1
2 files changed, 5 insertions, 12 deletions
diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp
index 3ff781a53f..997e4c931c 100644
--- a/scene/3d/skeleton_3d.cpp
+++ b/scene/3d/skeleton_3d.cpp
@@ -273,16 +273,15 @@ void Skeleton3D::_update_process_order() {
#ifndef DISABLE_DEPRECATED
void Skeleton3D::setup_simulator() {
+ if (simulator && simulator->get_parent() == this) {
+ remove_child(simulator);
+ simulator->queue_free();
+ }
PhysicalBoneSimulator3D *sim = memnew(PhysicalBoneSimulator3D);
simulator = sim;
sim->is_compat = true;
sim->set_active(false); // Don't run unneeded process.
- add_child(sim);
-}
-
-void Skeleton3D::remove_simulator() {
- remove_child(simulator);
- memdelete(simulator);
+ add_child(simulator);
}
#endif // _DISABLE_DEPRECATED
@@ -296,11 +295,6 @@ void Skeleton3D::_notification(int p_what) {
setup_simulator();
#endif // _DISABLE_DEPRECATED
} break;
-#ifndef DISABLE_DEPRECATED
- case NOTIFICATION_EXIT_TREE: {
- remove_simulator();
- } break;
-#endif // _DISABLE_DEPRECATED
case NOTIFICATION_UPDATE_SKELETON: {
// Update bone transforms to apply unprocessed poses.
force_update_all_dirty_bones();
diff --git a/scene/3d/skeleton_3d.h b/scene/3d/skeleton_3d.h
index e5d1525ea2..23b9423993 100644
--- a/scene/3d/skeleton_3d.h
+++ b/scene/3d/skeleton_3d.h
@@ -69,7 +69,6 @@ class Skeleton3D : public Node3D {
#ifndef DISABLE_DEPRECATED
Node *simulator = nullptr;
void setup_simulator();
- void remove_simulator();
#endif // _DISABLE_DEPRECATED
public: