diff options
-rw-r--r-- | scene/2d/physics_body_2d.cpp | 7 | ||||
-rw-r--r-- | scene/3d/physics_body_3d.cpp | 14 |
2 files changed, 15 insertions, 6 deletions
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 19063981bf..fa94712396 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -447,9 +447,12 @@ void RigidBody2D::_body_state_changed(PhysicsDirectBodyState2D *p_state) { lock_callback(); set_block_transform_notify(true); // don't want notify (would feedback loop) - _sync_body_state(p_state); - GDVIRTUAL_CALL(_integrate_forces, p_state); + if (GDVIRTUAL_IS_OVERRIDDEN(_integrate_forces)) { + _sync_body_state(p_state); + + GDVIRTUAL_CALL(_integrate_forces, p_state); + } _sync_body_state(p_state); set_block_transform_notify(false); // want it back diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp index 973d1cde58..a5f5ae6e61 100644 --- a/scene/3d/physics_body_3d.cpp +++ b/scene/3d/physics_body_3d.cpp @@ -502,9 +502,12 @@ void RigidBody3D::_body_state_changed(PhysicsDirectBodyState3D *p_state) { lock_callback(); set_ignore_transform_notification(true); - _sync_body_state(p_state); - GDVIRTUAL_CALL(_integrate_forces, p_state); + if (GDVIRTUAL_IS_OVERRIDDEN(_integrate_forces)) { + _sync_body_state(p_state); + + GDVIRTUAL_CALL(_integrate_forces, p_state); + } _sync_body_state(p_state); set_ignore_transform_notification(false); @@ -2935,9 +2938,12 @@ void PhysicalBone3D::_body_state_changed(PhysicsDirectBodyState3D *p_state) { } set_ignore_transform_notification(true); - _sync_body_state(p_state); - GDVIRTUAL_CALL(_integrate_forces, p_state); + if (GDVIRTUAL_IS_OVERRIDDEN(_integrate_forces)) { + _sync_body_state(p_state); + + GDVIRTUAL_CALL(_integrate_forces, p_state); + } _sync_body_state(p_state); set_ignore_transform_notification(false); |