Sfoglia il codice sorgente

Merge pull request #91122 from TokageItLab/simulator-memdel

Modify allocation process of the PhysicalBoneSimulator in Skeleton3D
Rémi Verschelde 1 anno fa
parent
commit
84013a31ea
2 ha cambiato i file con 5 aggiunte e 12 eliminazioni
  1. 5 11
      scene/3d/skeleton_3d.cpp
  2. 0 1
      scene/3d/skeleton_3d.h

+ 5 - 11
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();

+ 0 - 1
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: