Merge pull request #82393 from jrouwe/body_changed_state

Fix performance regression in RigidBody2D/3D and PhysicalBone3D
This commit is contained in:
Rémi Verschelde 2023-10-04 15:35:30 +02:00
commit 72cdb0b4c5
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 15 additions and 6 deletions

View file

@ -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

View file

@ -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);